Gzip を Rsync にパイプする

Gzip を Rsync にパイプする

ファイルを gzip で圧縮し、すぐに別のサーバーに rsync して、作成された gzip ファイルがローカル サーバーに書き込まれないようにしたいです。このようなことをしようと思っていましたが、明らかに失敗します。

gzip ファイル | rsync -auv another_server

これについて何か考えのある人はいますか? それとも、これは可能なのでしょうか?

答え1

これに対する私の通常のアプローチは、次のように gzip と ssh を使用することです。

gzip -c ファイル | ssh[メールアドレス]「cat > destination.gz」

これにより、zip 出力が SSH 経由でリモート ホストのファイル "destination.gz" に直接送信されます。手動で行う場合は、SSH パスワードを入力するだけです。自動的に行う場合は、次のように SSH キーを設定する必要があります。

http://pkeck.myweb.uga.edu/ssh/

答え2

これを個人的に受け止めないでください。しかし、あなたの質問とコメントから、あなたはrsyncが実際に何であるかを理解していないようです。のためにファイルをある場所から別の場所へ移動するためのものではありません。同期する2 つの場所間でファイルを転送します。ローカル マシンにコピーを保存したくない場合は、同期が行われていないことになり、rsync は必要なツールではありません。

ファイルを転送しようとしています。そのためには、ファイルをディスク上に置き、ssh、ftp、sftp、ftps などを使用するか、Glenn が提案したように ssh を介してパイプすることができます。これが正しい答えであり、目的を達成するための唯一の正しい方法です。リソースの使用率が心配な場合は (高帯域幅の接続ではこれが影響する可能性があります)、暗号を変更します。

gzip -c somefile | ssh -c blowfish user@host 'cat > someotherfile'

何かをしようとして (rsync へのパイプなど) うまくいかない場合は、やり方が間違っているか、間違ったことをしようとしている可能性があります。これは仕事に適したツールの問題であり、何をしようとしているにせよ、適切なツールがあるという可能性を排除しないことが重要です。

UNIX 環境で利用できるさまざまなツールの目的を理解し、それを念頭に置いておくと、その環境をより効果的に使用および操作できるようになります。多くのツールには微妙な違いや重複した機能がありますが、それらすべてに注意を払わなければ、タスクを達成するための最適な方法の多くを見逃してしまいます。

答え3

送信されるコンテンツは一意であるため、このインスタンスでは rsync にメリットはないでしょう。

ファイルを圧縮して出力を STDOUT に送信するのは非常に簡単です。

gzip -c file > another-file

速度を求めており、両端を制御できる場合、netcat にはオーバーヘッドがほとんどありません。

宛先マシンをポート1234でリッスンするように設定します

user@bar$ nc -l -p 1234 > file.gz

'file.gz' をマシン bar:1234 に送信します

user@foo$ gzip -c file | nc bar 1234

答え4

gzip と rsync を組み合わせても機能しません。

圧縮されていないファイルを送信する場合、rsync は変更されたビットのみを送信することで機能します。しかし、ファイルを gzip すると、結果のファイルは毎回大幅に異なります。それを rsync にパイプすると、せいぜい ssh と同様の結果が得られますが、それよりも悪い結果になる可能性もあります。

圧縮ファイルが毎回異なるのは、圧縮前にデータのプロファイルを作成するためです。つまり、ファイル内の小さな変更でもプロファイルが変更され、圧縮されるすべてのバイトに影響する可能性があります。

関連情報