bsdtarを使用して2つのLinuxサーバー間でファイルをコピーする最速の方法を探しています。
通常のtarの場合は、次のことを行います。
ssh root@remote 'tar -cz -C /my/path/ big_file.txt' | tar -zxv
しかし、「tar」を「bsdtar」に置き換えるだけでは機能しないようです。
だから私の質問は次のとおりです。
- bsdtarを使ってこれを行うにはどうすればよいですか?
- gzipを使用する代わりに、pbzip2のように圧縮/圧縮解除に複数のコアを使用できるものを使用したいと思います。どのように入力しますか?
- 名前が変更された一時ファイルを使用せずに、ターゲットサーバーで "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
に似ています)。-s
pax
--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