我需要比较两个包含大量文件的大型目录。我尝试使用:
diff -r Directory1 Directory2
但不幸的是,由于文件数量巨大,该过程非常缓慢。
因此,我想到通过仅比较文件夹的内容而不是文件的实际内容来加快该过程。有没有办法让 diff 递归地仅检查 Directory1 和 Directory2 的每个子目录的名称和文件内容是否匹配,但不检查 Directory1 中的每个文件是否实际上与 Directory2 中的每个文件匹配?
例如,假设我有“Directory1/SubDirectory1”和“Directory2/Subdirectory1”。我只想检查“Directory1/SubDirectory1”和“Directory2/Subdirectory1”是否具有相同数量的文件和相同的文件名(比如说,file1、file2、...fileN),但我并不关心将“Directory1/SubDirectory1”中的每个 file1、file2...fileN 与“Directory2/SubDirectory1”中的每个 file1、file2...fileN 进行匹配,以查看它们的内容是否实际上相同。有办法做到这一点吗?
编辑:
我尝试使用:
diff <(path1) <(path2)
但不幸的是,diff 输出每个文件的完整路径。我得到的输出如下:
< /Volume1/.../.../Directory1/SubDirectory1/file1
< /Volume1/.../.../Directory1/SubDirectory1/file2
...
> /Volume2/.../.../Directory2/SubDirectory1/file1
> /Volume2/.../.../Directory2/SubDirectory1/file2
...
这里每个文件名都明显不同,因为完整路径不同。有没有办法强制 find 仅从您作为参数提供的目录开始输出路径?例如:
find -(some option I'm not aware of) /Volume1/.../.../Directory1
输出:
/Directory1/SubDirectory1/file1
/Directory1/SubDirectory1/file2
...
答案1
尝试这个:
diff <(ls -R1 dir1) <(ls -R1 dir2)
该R
开关递归目录并1
仅输出文件名,而不输出所有者、日期等字段,这些字段会产生虚假的差异。