scp経由で多数の小さなファイルをコピーする最良の方法は何ですか?

scp経由で多数の小さなファイルをコピーする最良の方法は何ですか?

数ギガバイトと数千の小さなファイルを含むディレクトリがあります。 scpを使ってネットワーク経由で何度もコピーしたいです。ソースコンピュータとターゲットコンピュータのCPU時間は安くなりますが、各ファイルを個別にコピーするために追加されるネットワークオーバーヘッドは膨大です。 tar / gzipで圧縮して送信しようとしていますが、ソースマシンにディスク容量が不足しています。

tar -czf <output> <directory>出力をscpにパイプする方法はありますか?そうでなければ、他の簡単な解決策はありますか?私のソースマシンは古いので(SunOS)ここにアイテムをインストールしたくありません。

答え1

SSHセッションを介してtarをパイプできます。

$ tar czf - <files> | ssh user@host "cd /wherever && tar xvzf -"

答え2

bzip2圧縮Tarを使用すると、ネットワークとCPUの負荷が軽減されます。

$ tar -C /path/to/src/dir -jcf - ./ | ssh user@server 'tar -C /path/to/dest/dir -jxf -'

画面出力として使用しないと、-v処理速度が遅くなることがあります。ただし、詳細な出力が必要な場合は、リモート-jcvf部分ではなくtar()のローカル部分で使用してください。

同じ宛先パスを繰り返しコピーする場合(バックアップコピーの更新など)、最良のオプションは圧縮によるrsyncです。

$ rsync -az -e ssh /path/to/src/dir/ user@server:/path/to/dest/dir/

src および dest パスは両方とも/で終わります。繰り返しますが、意図的に-vフラグを使用せず、-P詳細な出力が必要な場合は追加します。

答え3

使用rsync、SSHを使用します。

使用法:

rsync -aPz /source/path destination.server:remote/path

rsync スイッチは圧縮情報と I-Node 情報を管理します。-P各ファイルの進行状況を表示します。

scp -C圧縮を有効にするを使用できますが、可能であればを使用してくださいrsync

答え4

あるいは、必要に応じて反対方向に行うこともできます。これは、提案されているようにタールボールをプッシュするのではなく、ネットワークを介してタールボールをプルすることです。これは問題の重複部分を解決せず、rsyncが最良のオプションですが、役に立つtarスイッチがあるかもしれません。

したがって、ローカルマシンでは次のようになります。

ssh remote 'tar zcf - /etc/resolv.conf' | tar zxf -

-Cまず、正しいディレクトリに移動するのが最善です。それ以外の場合は、最後に uning コマンドでスイッチを使用する必要があります。tar

必要に応じてこれに言及してください。私の場合、ローカルサーバーがnatの背後にあったので、これは私にとって効果的でした。したがって、前述の方法でこれを行うには、いくつかのネットワークテストが必要でした。

関連情報