10

.git ディレクトリをスキップしながら、フォルダー (およびそのサブフォルダー) 内の各ファイルに固定文字列を追加しようとしています。

私はこのようなことがうまくいくと思っていました

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

追加のエコーで実行すると、正しく見えるコマンドが生成されます

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

これらのコマンドは、シェルから直接実行すると必要なことを実行しますが、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 に答える