在不实际比较文件中的数据的情况下比较两个目录结构的最佳和最简单的方法是什么?这工作正常:
diff -qr dir1 dir2_
Run Code Online (Sandbox Code Playgroud)
但它真的很慢,因为它也在比较文件。是否有 diff 或其他简单的 cli 工具的开关来执行此操作?
Sla*_*ast 41
以下(如果您将第一个目录替换为 directory1,将第二个目录替换为 directory2)应该可以快速完成您正在寻找的操作:
find directory1 -type d -printf "%P\n" | sort > file1
find directory2 -type d -printf "%P\n" | sort | diff - file1
Run Code Online (Sandbox Code Playgroud)
基本原理是它打印出所有目录,包括相对于基本目录N 个目录的子目录路径。
如果您在某些目录名称中有回车,而在其他目录名称中没有回车,这可能会下降(产生奇怪的输出)。
gar*_*ohn 35
vimdiff <(cd dir1; find . | sort) <(cd dir2; find . | sort)
Run Code Online (Sandbox Code Playgroud)
会给你一个很好的并排显示两个目录层次结构,所有公共部分都折叠了。
int*_*ted 23
我通常rsync
用于此任务:
rsync -nav --delete DIR1/ DIR2
Run Code Online (Sandbox Code Playgroud)
始终使用-n
, aka--dry-run
, 选项要非常小心,否则它会同步(更改目录的内容)。
这将根据文件修改时间和大小比较文件...我认为这就是您真正想要的,或者至少您不介意这样做吗?我觉得你只是希望它发生得更快,而不是你需要它来忽略文件内容之间的差异。如果您确实希望它不列出具有相同名称的不同文件,我认为添加该--ignore-existing
选项可以做到这一点。
另外要注意,不要把一个/
在结束DIR1
将导致其比较目录 DIR1
与内容的DIR2
。
输出最终有点冗长,但它会显示哪些文件/目录不同。存在于DIR2
和不存在的文件/目录DIR1
将以deleting
.
对于某些情况,@slartibartfast 的答案可能更合适,但您需要删除-type d
启用非目录文件列表的选项。 rsync
如果您要比较大量文件/目录,速度会更快。
小智 21
类似于 ls 答案,但如果您安装树,则可以
tree dir1 > out1
tree dir2 > out2
diff out1 out2
Run Code Online (Sandbox Code Playgroud)
小智 7
这满足了我在预期匹配的树中查找丢失文件的特定需求。
diff <( cd dir1; find * |sort ) <(cd dir2; find * | sort)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
55329 次 |
最近记录: |