差异文件存在于两个不同的目录中
我有两个相同的文件列表目录。 我需要使用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