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

如何用find命令删除过期文件并同步删除另一目录同名文件

解决方案:同步删除/dir1和/dir2中的目标文件

没问题,这个需求很容易实现,核心思路就是找到/dir1中符合条件的文件后,同时删除该文件以及/dir2中同名的文件。这里给你几个可靠的实现方式,兼顾安全性和实用性:

方法1:使用find + -exec直接处理(推荐基础场景)

把原来的-delete替换成调用shell命令同时删除两个文件:

find /dir1 -type f -name '*.json' -mtime +15 -exec sh -c 'rm "$0" "/dir2/$(basename "$0")"' {} \;

命令解释:

  • {}:代表find找到的每一个符合条件的文件路径(比如/dir1/foo.json)
  • basename "$0":提取文件名部分(比如foo.json),拼接/dir2/后得到/dir2/foo.json
  • rm "$0" "/dir2/$(basename "$0")":同时删除/dir1中的原文件和/dir2中的同名文件

方法2:带空字符分隔的安全版本(适合文件名含空格/特殊字符)

如果你的文件名可能包含空格、换行或其他特殊字符,用-print0和xargs -0避免解析错误:

find /dir1 -type f -name '*.json' -mtime +15 -print0 | xargs -0 -I {} sh -c 'rm "{}" "/dir2/$(basename "{}")"'

为什么更安全?

  • -print0让find用空字符\0分隔文件名,而不是默认的换行
  • xargs -0识别空字符作为分隔符,避免文件名中的空格被误判为多个参数

可选优化:屏蔽不存在文件的错误提示

如果/dir2中可能没有对应同名文件,rm会输出“No such file or directory”的错误信息,加上2>/dev/null可以屏蔽这些无关错误:

find /dir1 -type f -name '*.json' -mtime +15 -exec sh -c 'rm "$0" "/dir2/$(basename "$0")" 2>/dev/null' {} \;

注意事项

  • 测试时可以先把rm换成echo,确认要删除的文件路径是否正确,比如:
    find /dir1 -type f -name '*.json' -mtime +15 -exec sh -c 'echo "$0" "/dir2/$(basename "$0")"' {} \;
    
    验证无误后再替换回rm执行删除操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:03:58