差异文件存在于两个不同的目录中

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

你可以使用diff命令:

 diff -bur folder1/ folder2/ 

这将输出一个忽略空格的recursiondiff,并带有一个统一的上下文:

  • b标志表示忽略空格
  • u标志表示一个统一的上下文(3行前后)
  • r标志表示recursion

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

 diff -qr dir_one dir_two | sort 

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

差异有一个选项-r是为了做到这一点。

diff -r dir1 dir2

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

 $ man diff ... -r --recursive Recursively compare any subdirectories found. ... 

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

否则,请尝试使用

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

NB正如Dennis在注释部分指出的那样,你实际上并不需要在ls上进行命令replace。 我一直这样做了这么久,我几乎在自动驾驶仪上这样做,而代之以我需要得到我的文件列表进行比较的命令。

另外我忘了补充说我暂时禁用我的别名ls到GNU ls,这样我就失去了GNU ls返回列表中的颜色格式信息。

以下是显示两个文件夹中文件差异的脚本。 它recursion地工作。 更改dir1和dir2。

 (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" ) 

尝试这个:

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