You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux如何使用find命令查找同名备份文件并仅保留最新版删除旧文件

备份文件清理方案(仅保留最新1个)

核心思路

遍历所有匹配的backupname.tar.gz文件,按修改时间从新到旧排序,排除最新的1个后删除剩余所有文件,全程处理特殊文件名(含空格、换行等)避免出错。

通用Linux(GNU环境)实现命令

find . -type f -name "backupname.tar.gz" -printf "%T@ %p\0" | sort -z -k1,1nr | sed -z '1d' | cut -z -d ' ' -f2- | xargs -0 rm -f

命令分段说明

  • find . -type f -name "backupname.tar.gz" -printf "%T@ %p\0":递归查找当前目录下所有名为backupname.tar.gz的普通文件,输出「文件修改时间戳+文件路径」,用空字符作为分隔符规避特殊文件名的解析问题
  • sort -z -k1,1nr:按时间戳从大到小排序(即最新的文件排在最前面)
  • sed -z '1d':删除排序后的第一条结果,也就是保留最新的文件
  • cut -z -d ' ' -f2-:剥离时间戳字段,仅保留文件路径
  • xargs -0 rm -f:将待删除的文件路径传给rm命令执行删除

macOS/BSD环境兼容命令

BSD系的find没有-printf参数,改用stat获取时间戳:

find . -type f -name "backupname.tar.gz" -exec stat -f "%m %N" {} \; | sort -k1,1nr | sed '1d' | cut -d ' ' -f2- | xargs rm -f

安全验证与拓展

  • 执行删除前可以把命令末尾的rm -f替换为ls -l,预览待删除的文件列表,确认无误后再执行删除操作,避免误删
  • 如果需要每个包含备份文件的子目录单独保留1个最新版本,使用以下命令:
find . -type f -name "backupname.tar.gz" -exec dirname {} \; | sort -u | while read dir; do
  find "$dir" -maxdepth 1 -type f -name "backupname.tar.gz" -printf "%T@ %p\0" | sort -z -k1,1nr | sed -z '1d' | cut -z -d ' ' -f2- | xargs -0 rm -f
done

内容的提问来源于stack exchange,提问作者Amir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 18:54:04