UNIX命令:比diff更快

时间:2015-02-20 18:01:49

标签: performance unix command diff

很长一段时间以来,我一直在两个外置硬盘上进行备份。这些驱动器让我发疯。

虽然存储在2个驱动器上的常规信息是相同的,但由于隐藏文件(如.DS_Store),它们的文件大小不同。到目前为止,我一直在使用根目录大小来确保这两个备份是相同的。如果两个根以字节为单位表示相同的大小,我可以肯定它们是相同的。但隐藏的文件确实是一个痛苦的问题。

我尝试使用diff,这样:

diff -rq -x '.*' dir1 dir2

但这非常慢。我求求你们,帮助我找一种方法来检查两个巨大的目录是否包含相同的数据。

我的想法是制作一些递归命令,只比较文件名+文件大小。这应该比diff快得多,实际上是比较每个文件。

PS:备份超过700 GB。

2 个答案:

答案 0 :(得分:1)

您可以使用rsync向您展示与这些内容不同的内容:

rsync -aHv --delete --dry-run dir1/ dir2/

如果你想用其他实用工具处理它,它不一定是最有用的输出格式,但是对于人工审查,它没关系......

答案 1 :(得分:0)

您可能需要考虑计算两个驱动器上的校验和并比较输出。 这应该比diff快得多,尽管运行需要一些时间。

尝试:

$ find -s somedir -not -path '*/\.*' -type f -exec md5sum {} \; | md5sum

您可以在find命令中看到隐藏文件被忽略。

您可能还想到了一种在没有隐藏文件的情况下计算目录大小的方法。

参考: https://unix.stackexchange.com/questions/35832/how-do-i-get-the-md5-sum-of-a-directorys-contents-as-one-sum