我发现一个意外的行为我发现“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