私は膨大な量のデータ(ある種のバックアップ)を構築し、それをネットワーク(sshまたはrsync)を介して別のホストに送信したいと思います。リモートホストにはデータを保存するのに十分なスペースがありますが、ローカルホストには十分なスペースがないため、ローカルファイルとして保存できません。データがパイプラインに入るときにデータのチェックサムを計算し、生成されたリモートファイルのチェックサムと比較したいと思います。だから私はパイプラインの真ん中に配置して、通過するすべての項目のチェックサムを計算することができるプログラムを探しています。
2つの「MITM」プログラムが私の頭の中に浮上しましたpv
が、mbuffer
どちらもこの機能を持っていないようでした。そしてcat
それはまたdd
目標にはなりません :-) チェックサムを計算する様々なプログラム(例えば、md5sum
などsha1sum
)は、入力を消費し、渡しません。助ける?ありがとうございます!
答え1
次の代替項目を使用しtee
て処理できます。>(…)
cat blob | tee >(md5sum >&2) | ssh user@remote 'tee >(md5sum >&2) >/tmp/blob'
このパイプは stdout を妨げないように stderr にチェックサムを書き込みます。ハッシュを維持するには、ハッシュをファイルにリダイレクトできます。
cat blob | tee >(md5sum >blob.md5) | <your pipe>