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

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

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并将打印修改时间和文件名,按mod时间sorting,删除第一行(最新文件),删除mod时间列,并交给xargs删除( xargs ,它将只回声删除命令,实际上并没有这样做)。