差异:仅比较文件是否存在,而不比较内容

差异:仅比较文件是否存在,而不比较内容

我只想使用 Diff 来检查两个位置中的文件和目录是否相同,但不比较文件本身的内容,因为这就是我所需要的,而常规 Diff 对于数据量来说花费的时间太长。我该怎么办呢?还有其他 Debian 标准工具可以完成此任务吗?

答案1

你不能为此使用 diff 。为什么您的要求是使用 diff?为什么人们总是在没有详细研究可能的解决方案的情况下就得出结论?

您可以使用diff -qr,但如果唯一的目标是比较概述的目录结构,那么从性能的角度来看,这并不明智这里

该问题的答案之一是

vimdiff <(cd dir1; find . | sort) <(cd dir2; find . | sort)

哪个

将为您提供两个目录层次结构的良好并排显示,其中任何公共部分都折叠起来。

答案2

我会对此发表评论马基的回答但时间太长了。他的解决方案有一个警告:

ls解析or findare 相似的输出不坚固且容易破损。这是一个例子:

$ mkdir dir{1,2}
$ touch !$/file{1..5}
touch dir{1,2}/file{1..5}
$ mkdir dir1/$'\n'.
$ touch !$/whoops
touch dir1/$'\n'./whoops
$ touch dir2/whoops
$ touch dir1/onlyin1
$ touch dir2/onlyin2
$ comm <( cd dir1 ; find . | sort ) <( cd dir2 ; find . | sort )
        .
.
./
./
        ./file1
        ./file2
        ./file3
        ./file4
        ./file5
./onlyin1
    ./onlyin2
        ./whoops

(我使用的是comm三向文本比较,而不是vimdiff这样我可以更轻松地复制粘贴;结果与 中的结果相同vimdiff。)

您会看到,这错误地显示该文件whoops位于两个目录中,而实际上其中一个文件位于其名称中包含换行符的whoops子目录中。dir1

通常人们不会在文件名或目录名中添加换行符,答案vimdiff应该适用于任何其他特殊字符(尽管我还没有测试过)。然而,这仍然是值得警惕的事情。如果您打算将其放入脚本或任何类型的生产代码中,请努力使其更加健壮,例如,通过正确遍历两个目录树并比较它们。

相关内容