如何使用“find”命令查找文件并向其中添加文本?

如何使用“find”命令查找文件并向其中添加文本?

我想做的是使用命令查找文件find,然后向这些文件添加文本。我尝试了多种方法,但都不起作用:

find . -type f -iname 'filename' -exec '{}' echo "hello123" > '{}'  \;
find . -type f -iname 'filename' -exec '{}' "hello123" > '{}'  \;

我尝试了上述命令,但它们不起作用。该find部分工作正常,但添加文本部分不工作。

这接近正确的做法吗?如果不是,我该怎么做?

答案1

shell 将> '{}'在运行find命令之前处理重定向,从而产生一个名为 的输出文件{}。同样,前面的代码-exec {}将尝试执行找到的文件。

你可以这样做

find . -iname 'filename' -exec sh -c 'echo hello123 >> "$1"' find-sh {} \;

或(更有效,因为它只sh对找到的几个文件运行一次)

find . -iname 'filename' -exec sh -c 'for f do echo hello123 >> "$f"; done' find-sh {} +

这里,find-sh是作为 shell 的第零个位置参数传递的任意字符串$0。在大多数 shell 中,替换字符串{}不需要用引号引起来 - 例如参见GNU 查找并屏蔽某些 shell 的 {} - 哪些?

或者,你可以完全避免 shell 重定向 - 例如,使用 sedA$在就地模式下,在最后一行之后添加文本:

find . -iname 'filename' -exec sed -i '$a hello123' {} +

相关内容