Я использую следующую команду для удаления старых файлов резервных копий:
find backups/ -name "bak_*.tbz" -mmin +4800 -exec rm -vf {} \;
Проблема: когда новых файлов нет, все файлы удаляются. В таком случае я бы предпочел оставить себе самую новую.
Как можно элегантно удалить старые файлы, кроме самого нового?
find backups/ -name "bak_*.tbz" -mmin +4800 -type f -printf '%T@ %p\n' | sort -k 1nr |\
tail -n +2 | cut -d ' ' -f 2 | xargs echo rm {}
Это предполагает, что GNU find
и напечатает время модификации и имя файла, отсортирует его по времени модификации, удалит первую строку (самый новый файл), удалит столбец времени модификации и передаст это xargs
для удаления (как уже говорилось, он будет только отображать команду удаления, но не выполняет ее).