在 Unix 命令行上下文中,我想比较两个真正巨大的文件(每个大约 1TB),最好使用进度指示器。
我试过diff
and cmp
,它们都使系统崩溃(macOS Mojave),更不用说给我一个进度条了。
比较这些非常大的文件的最佳方法是什么?
额外细节:
我只想检查它们是否相同。
cmp
以系统确实自行重新启动的方式使系统崩溃。:-( 也许系统内存不足?
在 Unix 命令行上下文中,我想比较两个真正巨大的文件(每个大约 1TB),最好使用进度指示器。
我试过diff
and cmp
,它们都使系统崩溃(macOS Mojave),更不用说给我一个进度条了。
比较这些非常大的文件的最佳方法是什么?
我只想检查它们是否相同。
cmp
以系统确实自行重新启动的方式使系统崩溃。:-( 也许系统内存不足?
如果您想获取有关它们相同或不同的事实的信息,则一种可能的方法是使用哈希。像这样的命令会给你
sha1
文件的哈希值:预期的结果是这样的:
您可以将
pv
其用作进度指示器,并将其传递给shasum
函数以检查哈希值是否相同。您可以通过从每个文件中截取几 GB、定时并适当扩展来估计总时间。进度条也必须计算字节数——它本身可能会将时间延长 50%。
事实上,您可以使用循环将文件分成 100 个部分(使用 dd 或 head -c + tail -c,使用管道),使用您喜欢的比较工具,并报告每个部分。
优点:
(a) 以 1% 的间隔为您提供进度报告。
(b) 如果早期存在差异,您会更早地得到答案,并且可以退出循环而不检查文件的其余部分。
(c) 比较 10GB 文件可能不会重新启动您的系统。
(d) 您可以调整它以对文件的已知区域进行更详细的分析:分而治之。
(e) 您可以将地址范围的部分分配给多个 CPU。