递归比较目录与不同内容的摘要,而不检查文件内容的差异

递归比较目录与不同内容的摘要,而不检查文件内容的差异

我想递归地比较两个目录的内容,显示其中一个或另一个中缺少哪些文件,以及哪些文件具有不同的内容。但我不想输出文件内的差异,只想输出它们是否不同。不会有任何需要担心的链接。

我希望这不是重复的,我已经浏览了示例,但找不到答案。谢谢

答案1

通常这看起来已经不错了:

diff -rq dirA dirB

答案2

不幸的是,diff -rq没有考虑到Unicode 等效项在文件名中。这会导致问题,因为我的 SanDisk 外部 SSD 在 Unicode 文件名中使用的字节码与我的 Mac 笔记本电脑不同。

例如,我的MacBook有以下文件:

tmp/Česky.txt
tmp/Česky/README.txt

我的SSD有以下内容完全相同的文件:

/Volumes/MySSD/Česky.txt
/Volumes/MySSD/Česky/README.txt

这些名称在浏览器中看起来完全相同,但在我的机器上它们实际上不同。在Python中给出不同的字节码:

# python3
>>> 'Česky'.encode()
b'C\xcc\x8cesky'
>>> 'Česky'.encode()
b'\xc4\x8cesky'

当我跑步时diff -rq tmp/ /Volumes/MySSD/,我得到:

Only in /Volumes/MySSD/: Česky
Only in /Volumes/MySSD/: Česky.txt
Only in tmp/: Česky
Only in tmp/: Česky.txt

即使我只是将这些文件从笔记本电脑复制到外部驱动器!文件的内容是相同的。

为了避免同样的问题,您可以使用这个Python脚本用于比较目录。

相关内容