この link は、タールファイルをコピーして、ネットワーク経由で送信される日付の量を最小限に抑える方法を説明しています。私は少し違うことをしようとしています。
さまざまなサブディレクトリレベルにいくつかのリモートファイルがあります。
remote:/directory/subdir1/file1.ext
remote:/directory/subdir1/subsubdir11/file11.ext
remote:/directory/subdir2/subsubdir21/file21.ext
そして、私はそれらすべてをリストしたファイルを持っています:
remote:/directory/allfiles.txt
それらを最も効率的にコピーするために、リモートサイトで私はただすることができました
tar zcvf allfiles.tgz `cat /directory/allfiles.txt`
しかし、それを行うのに十分なスペースがありません。
ローカルディスクに十分なストレージスペースがあります。リモートサーバーからの着信ストリームをtar
する方法はありますか(転送にscp
またはssh
を使用)?
何かのようなもの /localdir$ tar zc - | ssh remote
cat/directory/allfiles.txt`推測しますが、ローカルホスト上のリモートファイルのみが一覧表示されます。
ほぼ正しく、ローカルではなくリモートホストでtarを実行するだけです。コマンドは次のようになります。
ssh remote_Host tar cvfz - -T /directory/allfiles.txt > remote_files.tar.gz
ローカルディスクに十分なスペースがあり、目標がネットワーク経由で送信される日付の量を最小限に抑えるためである場合は、scpまたは-で圧縮を有効にするだけで十分かもしれません。 rsync:
scp -avrC remotehost:/path/to/files/file1 /files/file2 ... local/destination/path
もちろん、tarを使用しなくても、小さなスクリプトを実行して各ファイルをループし、scp圧縮転送を実行できます。 rsyncですべてがより居心地が良くなります
rsync -avz --files-from=FILE remotehost:/path/to/files local/destination/path
ssh経由でリモートホストに接続し、そこに書き込むことができます
tar cvzf - -T list_of_filenames | ssh Local_Hostname tar xzf -
参照:
からman scp
:
-C Compression enable. Passes the -C flag to ssh(1) to enable compression.
からman rsync
--files-from=FILE read list of source-file names from FILE -z, --compress compress file data during the transfer --compress-level=NUM explicitly set compression level
開始コマンドを実行した場合:
tar zcvf allfiles.tgz `cat /directory/allfiles.txt`
次に、ファイルがリモートで終了することを確認するだけです。それで、tarを標準出力にしましょう。それをパイプして、netcatsandがローカルファイルとして保存します。
または、次のようなものです。
地元: nc -l 1234 | gunzip | tar zcvf allfiles.tgz
リモート:cat /directory/allfiles.txt | gzip | nc localIP 1234
説明:
ローカル、ステップ1:netcatからの入力。 -lいくつかのポートでリッスンします。必要な場所に出力を送信します。
リモート:ステップ1:youyrはすでにファイルのリストを終了しています。最小限のネットワークデータのためにgzip圧縮されています。結果をローカルに送信します。
local:ステップ2:うーん、すでにgzip圧縮されたファイルを取得しています。それらをtarに供給する前に、それらを解凍しましょう。
使用する帯域幅の量を減らすためにデータを可能な限り圧縮したい場合は、次のようにxzツールを使用してtarコマンドを実行できます。
ssh Host 'tar cvf - -T /directory/allfiles.txt | xz -9' > files.tar.xz
余分な一重引用符('
)に注意してください。パイプはローカルシェルではなくリモートシェルで実行する必要があるため、これらが必要です。
ただし、注意すべきいくつかの欠点があります。
-9
を使用する場合、xz
コマンドは非常に遅くなります。 CPUを何時間も使用するために追加料金を支払わない場合(Gbのデータを転送する場合...)、問題はないはずです。それでも、帯域幅がサービスの中で最も高価な部分である場合は、可能な限り最高の圧縮を使用することをお勧めします。
圧縮するとダウンロードの速度が遅くなることに注意してください。サーバーのディスクドライブに十分なスペースがある場合は、サーバー上にtarballを作成してみて、そのプロセスが完了したら、1回の高速転送を実行します。接続が少し不安定な場合、上記のsshコマンドが途中で中断し、プロセス全体を再起動する必要があるためです...それが実際の問題である場合、rsync
を使用すると確実にあなたの最善の策。 rsync
の利点は、ファイルを一度に1つずつ送信し、中断したところから再開できることです。また、データを圧縮しますが、私が知る限り、gzipしか認識していません(ただし、確認してからしばらく経ちましたが、より優れたコンプレッサーをサポートするようになりました)。