关于unix:存在于两个不同目录中的Diff文件

Diff files present in two different directories

我有两个目录具有相同的文件列表。 我需要使用diff命令比较两个目录中的所有文件。 是否有一个简单的命令行选项来执行它,或者我是否必须编写一个shell脚本来获取文件列表然后迭代它们?


您可以使用diff命令:

1
diff -bur folder1/ folder2/

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

  • b标志意味着忽略空格
  • u flag表示统一的上下文(前后3行)
  • r flag表示递归


如果您只想查看不同的文件,可以使用:

1
diff -qr dir_one dir_two | sort

选项"q"仅显示不同但不同的内容的文件,"sort"将按字母顺序排列输出。


Diff有一个选项-r就是为了做到这一点。

diff -r dir1 dir2


diff不仅可以比较两个文件,还可以使用-r选项遍历整个目录树,递归检查子目录和每个树中可比较点发生的文件之间的差异。

1
2
3
4
5
6
7
8
$ man diff

...

-r  --recursive
        Recursively compare any subdirectories found.

...

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

否则,请尝试使用

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

注:正如Dennis在评论部分所指出的,你实际上并不需要在ls上执行命令替换。我已经这么做了很长时间以至于我在自动驾驶仪上做了很多这样的事情并且用我需要的命令来获取我的文件列表以进行比较。

另外我忘了补充一点,我确实要暂时禁用我的别名ls到GNU ls,这样我就会丢失GNU ls返回的列表中的颜色格式信息。


这是一个脚本,用于显示两个文件夹中文件之间的差异。它以递归方式工作。改变dir1和dir2。

1
(search() { for i in $1/*; do [ -f"$i" ] && (diff"$1/${i##*/}""$2/${i##*/}" || echo"files: $1/${i##*/}   $2/${i##*/}"); [ -d"$i" ] && search"$1/${i##*/}""$2/${i##*/}"; done }; search"dir1""dir2" )


试试这个:

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