2017-01-05 3 views
0

Допустим, у меня есть следующие имена каталогов в ведро aws s3. Этот выход возвращается aws s3 ls:Shell: Как перебрать имена каталогов и получить два последних?

PRE 20161205_1248/ 
PRE 20161207_1613/ 
PRE 20161211_1732/ 
PRE 20161213_1806/ 
PRE 20161216_0603/ 
PRE 20161219_0255/ 
PRE 20161224_1350/ 
PRE 20161226_1915/ 
PRE 20161229_0154/ 
PRE 20161231_1139/ 

Где имена каталогов метки времени и последняя является:

20161205_1248 

Как я могу перебирать имена каталогов, чтобы получить один, прежде чем последний? I`m новый обстреливать был так будет благодарен за любую помощь

+1

Не является ли '20161205_1248' самым старым, где' 20161231_1139' является последним? Каков ваш фактический результат. – Inian

ответ

0
  1. Список всех файлов в директории с Ls
  2. Сортировка их рекурсивно сортировки
  3. Получить последние 2 строки с хвостом
  4. Получите 1-ую линию этой фракции с головой

    ls | sort -r | tail -2 | head -1 
    

Если вы путать Lastest с последним , затем оставьте параметр -r в стороне от сортировки.

+1

В качестве альтернативы, используйте 'sed' для печати определенной строки, a la' ls | sort -r | sed -n '2 {p; q}' ' – twalberg

+0

Да, ваша команда еще короче. Но оставляя точку с запятой после команды q, выдала сообщение об ошибке (на mac). Вам нужно q или будет 'sed -n '2p'' делать это в любом случае? –

+0

Я полагаю, строго говоря, 'q' не требуется - он просто выходит рано и избегает чтения остальной части файла/ввода. В этом случае, поскольку вход настолько мал, это, вероятно, не имеет значения, но в тех случаях, когда вы извлекаете одну конкретную строку из 3 миллиардов или что-то еще, она может иметь заметную разницу. – twalberg