BASH: показать найти все файлы, но не последние 2 новейшие

У меня есть список файлов, который может содержать один временный список:

1489247450-filename1
1489248450-filename2
1489249450-filename3
1489249550-filename4

и в другой раз:

1489249450-filename3
1489249550-filename4

и в другой раз:

1489245450-filename1
1489246450-filename2
1489247450-filename3
1489248450-filename4
1489249450-filename5
1489249550-filename6

Список создается:

find ./ -type f -name *filename* -exec stat --format="%X-%n" {} \; | sort

Я хотел бы выбрать все файлы, но не 2 самых новых.

Я могу построить скрипт, который мог бы подсчитать все файлы и вычесть 2 и после этого сделать | head, Но есть ли гораздо более простой способ сделать это?

Я хотел бы удалить старые файлы только при условии, что есть 2 новейших.

Я не хочу использовать ctime, потому что файлы не создаются в обычное время.

2 ответа

Решение

Результат был действительно прост.

Если вы хотите перечислить все файлы, кроме самых новых 3, вы можете сделать:

find ./ -type f -name "*605*" -exec stat --format="%X-%n" {} \; | sort | head -n -3

Голова -n -3 это главное!!

Если список в правильном порядке:

find ./ -type f -name *filename* -exec stat --format="%X-%n" {} \; | sort | tail +3

Иначе:

find ./ -type f -name *filename* -exec stat --format="%X-%n" {} \; | sort -r | tail +3
Другие вопросы по тегам