我發現一個意外的行爲我發現「find -exec」bash命令,我將不勝感激一些解釋。可以用「for file_name in find ....
; do ....」循環完成同樣的工作,所以問題是爲什麼它不能與find的-exec選項一起工作。意外的行爲查找-exec
有兩個文件夾(SRC /和src /)具有相同的一組文件。我想比較這些文件夾中的文件:
find src/ -type f -exec sh -c "diff {} `echo {} | sed 's/src/SRC/'`" \;
但是,這並不會比較文件...由於某些原因,sed命令不會進行替換。如果只有一個文件,例如,「一」,在每一個這樣的文件夾,然後在命令
find src/ -type f -exec sh -c "echo {} `echo {} | sed 's/src/SRC/'`" \;
輸出
src/a src/a
如果一個人確實在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/A」
和
find src/ -type f -exec bash -c "echo `echo {} | sed 's/src/SRC/'`" \;
給 「SRC/A」
那是預期的行爲?
你爲什麼不使用'差異-r SRC src'? – GMichael
Escape'\''as'\\'' – anishsane
@Michael這是一個很好的觀點,但它並不回答我的問題。回答你的問題:最初我想在最後得到一些令人想起emacs -q --eval'(ediff-merge-files「file2」「file2」)的東西,但是意識到find有問題...然後簡化爲這個例子.... – Mitya