我想做的是使用命令查找文件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' {} +