find 的 -exec 和 xargs 差在哪
【摘要】 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)