find 的 -exec 和 xargs 差在哪

举报
yd_213781742 发表于 2026/11/11 11:17:18 2026/11/11
【摘要】 find 的 -exec 和 xargs 到底差在哪:从进程模型、参数传递方式和特殊字符处理三个角度说清,给出什么时候必须用 -exec、什么时候 xargs 更合适,以及 -print0 配 -0 这种容易漏掉的写法。

批量删老日志,find | xargs rm 碰到带空格的文件名就报 No such file,-exec {} + 不会。差别在参数怎么拼。

1. 两种写法对比

find /var/log -name '*.gz' -mtime +30 -exec rm -f {} +   # 攒成一批传,空格安全
find /var/log -name '*.gz' -mtime +30 | xargs rm -f      # 空格换行都会被拆开

2. \; 和 + 不是一回事

find . -name '*.tmp' -exec ls -l {} \;   # 每个文件 fork 一次
find . -name '*.tmp' -exec ls -l {} +    # 批量执行,进程数最少

3. 非要用 xargs 就配 -0

find /data -name '*.log' -print0 | xargs -0 gzip

坑:{} 必须单独占一个参数,写成 {}x 会被当成文件名;+ 只能放在命令末尾。

小结:能 -exec {} + 就别管道给 xargs,少 fork 一轮,也不会被空格坑。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。