我有两个具有相同文件列表的目录。我需要使用diff命令比较两个目录中存在的所有文件。是否有一个简单的命令行选项可以做到这一点,或者我必须编写一个shell脚本来获得文件列表,然后遍历它们?


当前回答

如果它是GNU diff,那么您应该能够将它指向两个目录并使用-r选项。

否则,请尝试使用

for i in $(\ls -d ./dir1/*); do diff ${i} dir2; done

注意:正如Dennis在评论部分指出的那样,实际上不需要在ls上执行命令替换。我已经这样做了很长时间,以至于我几乎是在自动驾驶仪上这样做,并替换了我需要的命令来获得文件列表以进行比较。

此外,我忘记添加,我做'\ls'暂时禁用我的别名ls到GNU ls,这样我就失去了从GNU ls返回的列表中的颜色格式信息。

其他回答

你可以使用diff命令:

diff -bur folder1/ folder2/

这将输出一个忽略空格的递归差分,具有统一的上下文:

B标志表示忽略空白 U标志表示统一上下文(前后各3行) R标志表示递归

在实践中,这个问题常常伴随着一些限制条件而出现。在这种情况下,下面的解决方案模板可能会派上用场。

cd dir1
find . \( -name '*.txt' -o -iname '*.md' \) | xargs -i diff -u '{}' 'dir2/{}'

如果你只对不同的文件感兴趣,你可以使用:

diff -qr dir_one dir_two | sort

选项“q”将只显示不同的文件,而不显示不同的内容,“sort”将按字母顺序排列输出。

Diff有一个选项-r,它的意思就是这样做。

"迪尔一德二

试试这个:

diff -rq /path/to/folder1 /path/to/folder2