Благодаря GNU find
и sort
, вы получите 50 последних файлов и их временную метку из текущего каталога:
find . -mindepth 1 -maxdepth 1 -printf '%T@ %p\n' | sort -n | tail -n 50
Передайте их во while read
чтобы получить каждое имя файла:
find . -mindepth 1 -maxdepth 1 -printf '%T@ %p\n' |
sort -n | tail -n 50 |
while read -r ts file; do echo rm -rf -- "$file"; done
Здесь printf
выводит сортируемую временную метку, которую будет использовать числовая sort
. Мы получаем самые старые 50 файлов или каталогов и удаляем каждый в отдельности. Удалите echo
в сценарии, чтобы фактически выполнить команды.
Обратите внимание, что это не работает, если ваши файлы / каталоги содержат новую строку в своем имени. Такое случается не часто, но будьте внимательны, чтобы проверить. Из-за характера read
, он также не будет работать, если есть начальные или конечные пробелы.
Дополнительные идеи см .: BashFAQ/003 - Как найти самый последний (самый новый, самый старый, самый старый) файл в каталоге?