我想递归地比较两个目录的内容,显示其中一个或另一个中缺少哪些文件,以及哪些文件具有不同的内容。但我不想输出文件内的差异,只想输出它们是否不同。不会有任何需要担心的链接。
我希望这不是重复的,我已经浏览了示例,但找不到答案。谢谢
答案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脚本用于比较目录。