Это комбинация ответа ceving's и anubhava. Оба решения не работают для меня. Поскольку я искал сценарий, который должен запускаться каждый день для резервного копирования файлов в архиве, я хотел избежать проблем с ls
(кто-то мог бы сохранить какой-нибудь смешной файл имени в моей резервной папке сохранения). Поэтому я изменил упомянутые решения в соответствии с моими потребностями. Решение Ceving удаляет три новых файла - не то, что мне нужно, и их спрашивали.
Мое решение удаляет все файлы, за исключением трех новейших файлов.
find . -type f -printf '%T@\t%p\n' |
sort -t $'\t' -g |
head -n -3 |
cut -d $'\t' -f 2- |
xargs rm
Некоторое объяснение:
find
перечисляет все файлы (не каталоги) в текущая папка. Они распечатываются с отметками времени. sort
сортирует строки на основе метки времени (самая старая сверху). head
печатает верхние строки, вплоть до последних 3 строк. cut
удаляет отметки времени. xargs
запускает rm
для каждого выбранного файла.
Для проверки моего решения:
(
touch -d "6 days ago" test_6_days_old
touch -d "7 days ago" test_7_days_old
touch -d "8 days ago" test_8_days_old
touch -d "9 days ago" test_9_days_old
touch -d "10 days ago" test_10_days_old
)
Это создает 5 файлов с разными временными метками в текущей папке. Запустите это сначала и код для удаления для проверки кода.