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

如何在find -exec中重定向grep命令的输出结果?

解决find结合grep重定向输出的问题

正确命令写法

如果需要预先清空目标文件(避免残留旧内容),可以执行:

> file1 && > file2 && find ./Documents/ -type f \( -name "*.out" -o -name "*.err" \) -exec sh -c 'grep "out" "$1" >> file1; grep "err" "$1" >> file2' sh {} \;

如果不需要清空旧内容,直接用追加模式写入:

find ./Documents/ -type f \( -name "*.out" -o -name "*.err" \) -exec sh -c 'grep "out" "$1" >> file1; grep "err" "$1" >> file2' sh {} \;

错误原因分析

  1. 参数顺序错误:你原来的grep out > file1 {}写法颠倒了重定向和文件参数的位置,grep的标准语法是grep 模式 目标文件,重定向必须放在命令末尾,否则grep会把file1当作要搜索的文件,{}变成无效参数,自然搜不到内容。
  2. 覆盖模式导致空文件:用>会每次覆盖目标文件,若最后处理的几个文件没有匹配结果,最终文件就会被清空成空文件,必须用>>以追加模式写入,保留每次grep的结果。
  3. 文件名引用不规范:在sh -c脚本中用$1明确引用传递的文件名,前面的sh是脚本的$0占位符,能避免文件名含空格、特殊字符时出现异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 10:20:34