我想构建一个巨大的数据块(某种备份)并通过网络(ssh 或 rsync)将其发送到另一台主机。远程主机上有足够的空间来存储数据,但本地主机上没有足够的空间,因此我无法将其存储为本地文件。我想在数据进入管道时计算数据的校验和(然后与生成的远程文件的校验和进行比较)。因此,我正在寻找一个可以放在管道中间的程序,并让它计算通过的所有内容的校验和。
我脑海中突然出现了两个“MITM”程序pv
,mbuffer
但似乎都没有此功能。而且cat
也dd
达不到要求:-)用于计算校验和的各种程序(例如md5sum
,sha1sum
等等)都消耗它们的输入并且不传递它。帮助?谢谢!
答案1
您可以使用tee
和处理替换>(…)
,例如
cat blob | tee >(md5sum >&2) | ssh user@remote 'tee >(md5sum >&2) >/tmp/blob'
该管道将校验和写入 stderr,以免干扰 stdout。如果您想保留哈希值,可以将其重定向到文件。
cat blob | tee >(md5sum >blob.md5) | <your pipe>