bsdtarを使用してサーバー間でファイルをコピーする方法は?

bsdtarを使用してサーバー間でファイルをコピーする方法は?

bsdtarを使用して2つのLinuxサーバー間でファイルをコピーする最速の方法を探しています。

通常のtarの場合は、次のことを行います。

ssh root@remote 'tar -cz -C /my/path/ big_file.txt' | tar -zxv

しかし、「tar」を「bsdtar」に置き換えるだけでは機能しないようです。

だから私の質問は次のとおりです。

  1. bsdtarを使ってこれを行うにはどうすればよいですか?
  2. gzipを使用する代わりに、pbzip2のように圧縮/圧縮解除に複数のコアを使用できるものを使用したいと思います。どのように入力しますか?
  3. 名前が変更された一時ファイルを使用せずに、ターゲットサーバーで "big_file.txt"ファイルを "hello_world.txt"として呼び出したいと思います。どのように?

アップデート1:

私は最初の問題を直接解決しました。

ssh root@localhost 'bsdtar -cz -f - -C /my/path/ big_file.txt' | tar -zxv

アップデート2:

3番目の問題は私が直接解決しました。

ssh root@localhost 'bsdtar -cz -f - -C /my/path/ big_file.txt' | tar -zxv -O > test.txt

答え1

このコマンドの構文にはさまざまなバリエーションがありますtar。 GNU tarはデフォルトで標準入力からアーカイブを読み込み、標準出力にアーカイブを書き込みますが、他の多くのバージョンではデフォルトでテープデバイスを使用します。fフラグ(ダッシュインクルードまたは除外 - BSDバージョンはどちらもサポートしていると思います)と-stdinまたはstdoutを表す引数を渡します。

他の(オフ)圧縮機を使用するには、圧縮を通知せずにtar明示的に(オフ)圧縮機をパイプします。

ファイル名を変更するに-sは、バージョンがサポートされている場合はoptionを使用します(GNU tarのオプションとオプションtarに似ています)。-spax--transform

ssh root@remote 'cd /my/path && bsdtar cf - -s '/big_file\.txt$/hello.txt/' big_file.txt | pbzip2' | pbzip2 -d | tar xf -

単一のファイルのみをコピーする場合は、メタデータを保存し、カスタム圧縮プログラムを使用したくない限り、tarを使用する必要はありません。

scp -C -p root@remote:/my/path/hello.txt big_file.txt

関連情報