使用rsync查询远程文件的校验和

使用rsync查询远程文件的校验和

我们可以使用 rsync 来简单地获取远程文件的校验和而不传输它吗?

如果您没有匹配的本地文件可供比较,这对于验证远程文件的完整性非常有用,而无需使用大量带宽。另外,如果您没有对远程计算机的完整 shell 访问权限(因此您不能只是登录并运行md5sum或其他什么),但可以通过 rsyncd、受限 ssh 等进行 rsync 访问。

答案1

是的,你可以做

rsync --checksum --dry-run --checksum-choice=xxh128  --out-format="%C" host.example.com:/tmp/foo/hello.txt /dev/null

这会将远程文件的 xxh128 校验hello.txt和以十六进制格式写入标准输出(例如6bba86c7e069f56d5a10b435f1c8e49c)。

在哪里:

  • --checksum强制计算校验和

  • --dry-run防止任何东西被转移

  • --checksum-choice=xxh128请求使用 xxh128 哈希算法。您还可以使用xxh64md5或 各种其他的,请参阅rsync --version您的客户支持的那些。

    请注意,只有当远程服务器也支持所需的算法时,这才有效。有些服务器可能根本不提供选择。我发现一台服务器(Synology NAS)仅支持 md5,如果--checksum-choice未提供,则使用它,但拒绝--checksum-choice-md5

  • --out-format="%C"仅输出每个传输文件的校验和。请参阅中的“日志格式”选项rsyncd.conf(5)您可以输出其他信息。使用--out-format="%C %f"产生与 相同格式的输出xxh128sum,可以用作xxh128sum --check(分别md5sum等)的输入。

  • /dev/null只是有一些东西可以作为本地目标文件。如果您没有提供目标文件,则 rsync 仅列出远程文件,但不会向远程服务器询问校验和。

您还可以给出匹配多个远程文件的模式,或用于-r递归地校验目录树中的所有文件。在这种情况下,请将/dev/null目标替换为现有本地目录的名称,例如/tmp.它不会被写入。

请注意,远程 rsync 可能会在生成任何响应之前对所有文件进行校验和,如果出现超时,这可能会出现问题。

相关内容