如何比较大文件和进度信息

如何比较大文件和进度信息

在 Unix 命令行上下文中,我想比较两个真正巨大的文件(每个文件大约 1TB),最好带有进度指示器。

我已经尝试过diffcmp,它们都使系统崩溃(macOS Mojave),更不用说给我一个进度条了。

比较这些非常大的文件的最佳方法是什么?

额外细节:

  1. 我只是想检查它们是否相同。

  2. cmp以系统自行重新启动的方式使系统崩溃。 :-( 也许系统内存不足?

答案1

如果您想获取有关它们相同或不同这一事实的信息,一种可能的方法是使用哈希。这样的命令将为您提供sha1文件的哈希值:

shasum file1 file2

预期结果类似于:

ddfdb3a7fc6fc7ca714c9e2930fa685136e90448 file1
ddfdb3a7fc6fc7ca714c9e2930fa685136e90448 file2

答案2

您可以用作pv进度指示器,并将其通过管道传递给shasum函数来检查哈希值以查看它们是否相同。

pv file1 | shasum
1.08MiB 0:00:00 [57.5MiB/s] [====================================>] 100%            
303462e848ecbec5f8ab12718fa6239713eda1c6  -

pv file2 | shasum
1.08MiB 0:00:00 [57.5MiB/s] [====================================>] 100%            
303462e848ecbec5f8ab12718fa6239713eda1c6  -

答案3

您可以通过从每个文件中删除几 GB、计时并适当扩展来估计总时间。进度条也必须计算字节数——它本身可能会将时间延长 50%。

事实上,您可以使用循环将文件分成 100 个部分(使用 dd 或 head -c + tail -c,带管道),使用您喜欢的比较工具,并报告每个部分。

优点:

(a) 以 1% 的间隔向您提供进度报告。

(b) 如果早期存在差异,您会更早得到答案,并且可以退出循环而不检查文件的其余部分。

(c) 比较 10GB 文件可能不会重新启动您的系统。

(d) 您可以对其进行调整,以对文件的已知区域进行更详细的分析:分而治之。

(e) 您可以将地址范围的部分分配给多个 CPU。

相关内容