Bash:删除除一个之外的旧文件

Bash:删除除一个之外的旧文件

我正在使用以下命令删除旧备份文件:

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删除(如上所述,它只会回显删除命令,而不会实际执行)。

相关内容