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


当前回答

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

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

其他回答

Diff不仅可以比较两个文件,它还可以通过使用-r选项遍历整个目录树,递归地检查每棵树中出现在可比性点上的子目录和文件之间的差异。

$ man diff

...

-r  --recursive
        Recursively compare any subdirectories found.

...

另一个不错的选择是über-diff-tool分光镜:

$ diffoscope a b

它还可以发出不同的JSON, html, markdown,…

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

"迪尔一德二

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

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

下面是一个脚本,显示两个文件夹中的文件之间的差异。它是递归的。修改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