如何在 Linux 中轻松确认两个单独的目录具有完全相同的内容?

Mik*_*e B 8 linux files rsync centos

CentOS 5.x

Mq 问题似乎与类似,但我不确定...

我有两台服务器(彼此完全隔离),每台服务器都有一个目录和子目录,这些目录和子目录应该具有完全相同的内容。

例如目录布局可能是这样的:

服务器 A -

/opt/foo/foob/1092380298309128301283/123.txt
/opt/foo/foob/5094380298309128301283/456.txt
/opt/foo/foob/5092380298309128301283/789.txt
/opt/foo/foob/1592380298309128301283/abc.txt
Run Code Online (Sandbox Code Playgroud)

服务器 B -

/opt/foo/foob/1092380298309128301283/123.txt
/opt/foo/foob/5094380298309128301283/456.txt
/opt/foo/foob/5092380298309128301283/789.txt
/opt/foo/foob/1592380298309128301283/abc.txt
Run Code Online (Sandbox Code Playgroud)

理想情况下,我想要一种进行递归检查并确认一切匹配的方法。

我也想避免使用任何第三方工具。

有任何想法吗?

Cam*_* S. 9

一种好方法是在树中的每个文件上使用 md5sums:

在 server1 上运行:

find /opt/foo/foob/ -type f -print0 | xargs -0 md5sum > report_from_server1.tx
Run Code Online (Sandbox Code Playgroud)

在 server2 上运行这个

find /opt/foo/foob/ -type f -print0 | xargs -0 md5sum > report_from_server2.tx
Run Code Online (Sandbox Code Playgroud)

然后只需比较两个文件(使用差异)或任何你喜欢的。

这与您要查找的内容相符吗?

当然,如果需要,您可以使用 SSH 远程执行命令。

  • 或 md5sum md5sums (2认同)

Sco*_*ack 7

如果您不一定关心发生了什么变化,只关心某些事情发生了变化,那么 rsync 仍然非常有用。尝试运行此命令并观察输出,假设这是从“servera”运行的。

rsync -avcn /opt/foo/ serverb:/opt/foo
Run Code Online (Sandbox Code Playgroud)

结果列表将是那些在您实际运行同步过程时会被修改的文件。请记住,即使仅更改时间戳,文件也会显示在列表中,但内容保持不变。既然我们添加了-n标志,那么实际上不会执行任何操作,只会报告。


Ric*_*ler 5

虽然您可以编写一个快速脚本来计算目录中单个文件的单个 MD5 哈希值,但更好的方法是使用一个名为的工具md5deep,该工具将递归计算目录中所有文件的哈希值,然后输出他们到一个文件。然后可以在另一个目录上使用它,将第一个哈希文件作为输入,并为您提供两个目录之间不同的文件列表。

因此,以您为例,您将遵循以下流程:

  1. 计算服务器 A 上所需目录的哈希值:

    md5deep -r /opt/foo/ > file_hashes.txt

  2. 将文件file_hashes.txt文件复制到服务器 B 上进行比较。

  3. 计算服务器 B 上所需目录的哈希值,但将来自服务器 A 的文件哈希值作为输入文件,使用该-x标志仅显示不同的文件:

    md5deep -x file_hashes.txt -r /opt/foo/

md5deep 工具集构成了大多数发行版的包管理系统的一部分,最棒的是它支持许多不同的散列算法,而不仅仅是 MD5。因此,如果您对碰撞感到偏执,那么您有多种选择。以下工具构成了 md5deep 的一部分,每个工具都提供了一种替代散列算法:

   md5deep - Compute and compare MD5 message digests
   sha1deep - Compute and compare SHA-1 message digests
   sha256deep - Compute and compare SHA-256 message digests
   tigerdeep - Compute and compare Tiger message digests
   whirlpooldeep - Compute and compare Whirlpool message digests
Run Code Online (Sandbox Code Playgroud)