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