我正在使用以下命令删除旧备份文件:
find backups/ -name "bak_*.tbz" -mmin +4800 -exec rm -vf {} \;
问题:如果没有新文件,则所有文件都会被删除。在这种情况下,我想保留最新的文件。
有什么优雅的方法可以删除除最新文件以外的旧文件?
答案1
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 {}
这假定 GNUfind
并将打印修改时间和文件名,按修改时间排序,删除第一行(最新文件),删除修改时间列并将其交给xargs
删除(如上所述,它只会回显删除命令,而不会实际执行)。