10

我正在尝试将固定字符串附加到文件夹(及其子文件夹)中的每个文件,同时跳过 .git 目录。

我希望这样的事情会起作用

 find . -type f ! -path "./.git/*" -exec "echo \"hello world\" >> {}" \;

如果我用额外的 echo 运行它,它会生成看起来正确的命令

bash> find . -type f ! -path "./.git/*" -exec echo "echo \"hello world\" >> {}" \;
echo "hello world" >> ./foo.txt
echo "hello world" >> ./bar.txt
...

当我直接从 shell 运行这些命令时,这些命令会执行我想要的操作,但是当我从 find 运行它时,我得到了这个:

bash> find . -type f ! -path "./.git/*" -exec "echo \"hello world\" >> {}" \;
find: echo "hello world" >> ./foo.txt: No such file or directory
find: echo "hello world" >> ./bar.txt: No such file or directory
...

但这些文件确实存在,因为当我列出目录时,我得到了这个:

bash> ls
bar.txt  baz.txt  foo.txt  subfolder/

我想我没有引用我需要的东西,但我已经尝试了我能想到的一切(双引号和单引号,转义而不是转义内引号等......)。

有人可以解释我的命令有什么问题以及如何实现将固定字符串添加到文件中吗?

4

1 回答 1

21

您需要指示外壳执行此操作:

find . -type f ! -path "./.git/*" -exec sh -c "echo hello world >> {}" \;
于 2013-10-18T10:22:32.767 回答