【发布时间】:2012-10-05 19:07:08
【问题描述】:
我正在寻找一种以自动方式合并两个 md5 文件(我们称它们为 a.md5 和 b.md5)内容的方法。 理想情况下,我想做这来自 bash 脚本,但我愿意探索替代方案。
我通过以下方式生成a.md5:
cd a && find . -type f -print0 | xargs -0 md5sum > ../a.md5
文件夹a 中有许多文件和目录。
从另一个文件夹b,我同样生成b.md5。
以下是 .md5 文件内容的 sn-p:
8f56e29ec16b2d59949c4a95b5607574 ./usr/share/man/man1/infocmp.1.gz
f245d527f4dd1fabab719b64414dccf7 ./usr/share/man/man1/clear.1.gz
c0ae88d29fc406c937c3f64511fa1ab0 ./usr/share/man/man1/modeline2fb.1
3b83017b7acd38a553c3132a0ccb1fd8 ./usr/share/man/man1/fbset.1
83530bf6b1a19ca69022536e7ca810b5 ./usr/share/man/man1/sqlite3.1
稍后文件夹a会添加新文件(如日志文件),然后被文件夹b覆盖,所以文件夹a和b的所有唯一文件都是存在,并且对于所有冲突,来自a 的文件将替换为来自b 的文件。
同样,我想合并a.md5 和b.md5 的内容,以便在任何冲突中b.md5 值替换特定文件的a.md5 值;但是,由于在合并之前添加了一些我不希望出现在结果中的文件,因此我不能简单地重新计算一个新的 md5 文件。
作为为上述需求提供一些上下文的文件注释,a 和 b 分别是嵌入式 linux 文件系统的内容; a 的内容被编程到一个干净的文件系统中,b 的内容在运行时被解压缩到文件系统中。 md5 的目标是验证内容是否已正确部署,并忽略运行时由各种事物生成的文件。我将在我的 PC 上生成 md5,并在嵌入式系统上执行 md5sum -c。
如上所述,bash 脚本是理想的,但我愿意接受其他建议,只要该过程可以自动化。
【问题讨论】:
-
我将不得不做一些检查(当涉及更复杂的外壳材料时,我仍然是一个padawan);但问题在于,a 和 b 中的重复文件之间的 md5 总和在理论上会有所不同。
-
实际上,这似乎工作得很好(谢天谢地,我对 sed 的复杂性犹豫不决)。我做到了:
cat b.md5 a.md5 | sort -k2 -u > c.md5,这正是我需要的。非常感谢!