"find -exec" bashコマンドの予期せぬ動作があることがわかりました。同じ仕事は "for file_name in find ....
; do ...."ループで行うことができます。なぜなら、問題はfindの-execオプションではうまくいかないからです。find -execの予期しない動作
同じファイルセットを持つ2つのフォルダ(SRC /とsrc /)があります。私は、これらのフォルダ内のファイルを比較したい:
find src/ -type f -exec sh -c "diff {} `echo {} | sed 's/src/SRC/'`" \;
これは、しかし、置換ことはありませんいくつかの理由のsedコマンドのためにファイルを...比較しません。一つだけのファイル、例えば、「A」は、こののそれぞれに、存在する場合はフォルダ、コマンド
find src/ -type f -exec sh -c "echo {} `echo {} | sed 's/src/SRC/'`" \;
出力
src/a src/a
1はbashで同様のことを行う場合は、以下のすべてのコマンドが与えます同じ結果(SRC/A):
echo src/a | sed 's/src/SRC/'
echo `echo src/a | sed 's/src/SRC/'`
sh -c "echo src/a | sed 's/src/SRC/'"
sh -c "echo `echo src/a | sed 's/src/SRC/'`"
が、このコマンドが供給されている場合は、 "-exec見つける..." 出力が異なります。
find src/ -type f -exec bash -c "echo {} | sed 's/src/SRC/'" \;
"SRC /"
と
find src/ -type f -exec bash -c "echo `echo {} | sed 's/src/SRC/'`" \;
を与えるには、 "SRC /"
が予想される動作ということです提供しますか?
は、なぜあなたは使用しない 'diffを-r SRC src'? – GMichael
エスケープ '\' '' \\ '' – anishsane
@マイケルは良い点ですが、私の質問には答えません。あなたの質問に答えるには、元々私はemacs -q --eval '(ediff-merge-files "file2" "file2")'を呼び起こすものを最後に得たいと思っていましたが、findに何か問題があることに気づきました...この例に戻りました.... – Mitya