【问题标题】:Merging two md5 files in linux在linux中合​​并两个md5文件
【发布时间】:2012-10-05 19:07:08
【问题描述】:

我正在寻找一种以自动方式合并两个 md5 文件(我们称它们为 a.md5b.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覆盖,所以文件夹ab的所有唯一文件都是存在,并且对于所有冲突,来自a 的文件将替换为来自b 的文件。

同样,我想合并a.md5b.md5 的内容,以便在任何冲突中b.md5 值替换特定文件的a.md5 值;但是,由于在合并之前添加了一些我不希望出现在结果中的文件,因此我不能简单地重新计算一个新的 md5 文件。

作为为上述需求提供一些上下文的文件注释,ab 分别是嵌入式 linux 文件系统的内容; a 的内容被编程到一个干净的文件系统中,b 的内容在运行时被解压缩到文件系统中。 md5 的目标是验证内容是否已正确部署,并忽略运行时由各种事物生成的文件。我将在我的 PC 上生成 md5,并在嵌入式系统上执行 md5sum -c

如上所述,bash 脚本是理想的,但我愿意接受其他建议,只要该过程可以自动化。

【问题讨论】:

  • 我将不得不做一些检查(当涉及更复杂的外壳材料时,我仍然是一个padawan);但问题在于,a 和 b 中的重复文件之间的 md5 总和在理论上会有所不同。
  • 实际上,这似乎工作得很好(谢天谢地,我对 sed 的复杂性犹豫不决)。我做到了:cat b.md5 a.md5 | sort -k2 -u > c.md5,这正是我需要的。非常感谢!

标签: linux bash merge md5


【解决方案1】:

一种可能的方式:您可以sort -k2 两个列表并使用join -1 2 -2 2 合并 a.md5 和 b.md5。最后,您应该删除两个位置中存在的文件的重复信息,sed 应该能够做到这一点。

【讨论】:

  • 其实你可以使用join来输出你想要的格式:join -1 2 -2 2 a.md5 b.md5 -o '2.1,0',其中-o指定输出格式,2.1使用第二个文件的第一个字段,和0 使用“连接字段”(在本例中为任一文件的第二个字段)。
【解决方案2】:

这个怎么样:

cat a.md5 b.md5|sort|uniq

【讨论】:

  • Wound 对此进行了一些调整以使其对我有用:cat b.md5 a.md5 | sort -k2 -u > c.md5 这仅在具有不同 md5sum 的重复文件名时才保留 b 中的所有条目。
猜你喜欢
  • 2017-09-14
  • 1970-01-01
  • 1970-01-01
  • 2014-10-28
  • 2017-06-19
  • 1970-01-01
  • 2011-09-21
  • 2015-09-27
  • 2012-06-24
相关资源
最近更新 更多