
10GBを超える巨大なディレクトリを圧縮していますが、圧縮に時間がかかります。ただし、これまで別の新しいサーバーにダウンロードする必要があります。
それでは、圧縮中に他のサーバーからファイルをダウンロードできますか?ダウンロード後は正常に使用できますか?
答え1
tar、gzip、tee、nc を使用して、サーバーに 1 つ、クライアントに 1 つという 2 つのコマンドを使用して、これらすべてを実行できます。
サーバーから:
tar cf - dirname/ | gzip -c - |tee dirname.tar.gz | nc -l 3333
クライアントから
nc serveraddress 3333 > dirname.tar.gz
ncは、ネットワークで使用されているcatのように動作する便利なツールであるnetcatを表します。
nc -l 3333
ローカルポート3333にリスニングソケットが作成され、stdinの内容がここに接続しているユーザーにストリーミングされます。
nc serveraddress 3333
サーバーへのTCP接続はポート3333で確立され、ソケット接続で受信されたすべてのコンテンツはstdoutにストリーミングされます。
これは、さまざまなコマンドチェーン(tar/gzip/teeなど)の実行中に他のコンピュータからファイルを転送する非常に簡単な方法です。
答え2
rsync
既存の圧縮プロセスをダウンロードできるかどうかはわかりませんが、この--inplace
ディレクティブで使用できます。ホストが圧縮プロセスを完了するまで、この操作を繰り返す必要があります。圧縮が完了した後に変更の最終デルタを取得するには、圧縮を再実行する必要があります。
別の方法は、アーカイブを作成するときにファイルのダウンロードを直接開始することです。
ssh user@host "tar cf - /path/to/files|gzip -c -| \
tee /path/to/compressed_file" > /path/to/local_compressed_file
上記のコマンドは、tar
にアーカイブを作成しstdout
、ストリームを圧縮し、ファイルをホストに書き込むためにstdout
使用し、再びローカルコピーに保存できます。tee
stdout