有没有办法在bash shell中比较find和diff的输出?

时间:2014-04-09 16:11:26

标签: bash

我想获取find的输出并能够将它们与diff进行比较,以查看文件是否相同。例如,假设我找到一些带有find的文件:

find . -name '*.bar'

./desktop/filename.bar
./otherdirectory/filename2.bar
./otherotherdirectory/filename3.bar

我希望能够做到

diff ./desktop/filename.bar ./otherdirectory/filename2.bar 

diff ./desktop/filename.bar ./otherotherdirectory/filename3.bar  
找到所有文件对的

等等(至少看文件是否相同),而不必为每对编写命令行。

find -exec选项不起作用,因为它会在每次结果时用{}替换{}

find . -name '*.bar' -exec diff {} \;

我也尝试将find的输出管道化为diff,但我也无法使其工作(虽然我还是新手并且可能做错了):

find . -name '*.bar' | diff  

这可能不太可行,但我不想为find找到的每一对文件写一个diff命令。

2 个答案:

答案 0 :(得分:1)

嗯,解决方案对我有用,如下所示

找到。 -name' * .bar' | xargs echo | xargs diff

答案 1 :(得分:0)

您可以使用diff并比较校验和,而不是尝试sha256sum所有可能的文件对来确定重复项:

find . -name '*.bar' -type f -exec sha256sum {} \;

相同的文件将具有相同的校验和。您可以将上述命令的输出传递给sort,以便按校验和对结果进行排序:

find . -name '*.bar' -type f -exec sha256sum {} \; | sort