У меня есть следующие файлы в каталоге:

trunk_rev.94564.zip
trunk_rev.94565.zip
trunk_rev.94566.zip
trunk_rev.94567.zip
trunk_rev.94568.zip
trunk_rev.94569.zip
v15_rev.94560.zip
v15_rev.94561.zip
v15_rev.94562.zip
v15_rev.94563.zip
v15_rev.94564.zip

Как я могу получить список из N (например, 3) новейших файлов ctime для каждого паттерна? Имена файлов могут быть разными. Например:

trunk_rev.94567.zip
trunk_rev.94568.zip
trunk_rev.94569.zip
v15_rev.94562.zip
v15_rev.94563.zip
v15_rev.94564.zip
<some_another_file>.zip
<some_another_file>.zip
<some_another_file>.zip

Заранее спасибо!

3 ответа3

1

Вы должны прочитать руководство по ls на этом этапе:

-c с -lt: сортировать и показывать, ctime (время последнего изменения информации о статусе файла) с -l: показывать ctime и сортировать по имени, иначе: сортировать по ctime, сначала сначала

и руководство головы, если вы еще не знакомы с ним.

1

Попробуйте следующее:

ls -l --time-style=full-iso | sort -k6 | tail -n3
0

Попробуйте это:

ls -1rt | awk 'BEGIN { FS="."; OFS="."; } { if (count[$1]<3) { count[$1]++; filenames[i++]=$0; } } END { for ( i in filenames ) { printf("%s\n",filenames[i]); } }'

Файлы будут перечислены только по порядку времени.

Чтобы перечислить их по ctime, сгруппировать по имени, добавьте команду сортировки :

ls -1rt | awk 'BEGIN { FS="."; OFS="."; } { if (count[$1]<3) { count[$1]++; filenames[i++]=$0; } } END { for ( i in filenames ) { printf("%s\n",filenames[i]); } }' | sort -t . -k 1,1

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .