web-dev-qa-db-ja.com

ファイルを保存せずにscpと解凍を同時に行う

私は答えを探していましたが、何もうまくいきませんでした。

別のサーバーのCDにあるtarファイルがあり、サーバーに転送して、中間保存せずにすべて同時に解凍する必要があります。タールには複数のファイルがあり、それらは不明である可能性があります。

自分のサーバーまたは他のサーバーからこれを行うにはどうすればよいですか?

私はこれをscpで調べ、tarとsshを使用して、rsyncで理解しようとしました。

どんな助けでも大歓迎です

3
scarlso9

ターゲットシステム(ファイルが抽出される場所):

cd /target/dir && ssh user@source_server "cat /path/to/your/file.tar" | tar -xvv

[〜#〜]または[〜#〜]

ソースサーバー(tarファイルが配置されている場所)から:

ssh user@target_system "cd /target/dir && tar -xvv" < /path/to/your/file.tar

以下に、(ターゲットシステム上で)遊ぶためのいくつかの選択肢があります。

scpおよびbashプロセス置換(利用可能な場合):

scp user@source_server:/path/to/your/file.tar >(cd /target/dir && tar -x)

scpおよび/proc/self (可能な場合は):

cd /target/dir && scp user@source_server:/path/to/your/file.tar /proc/self/fd/1 | tar -x
4

これは、ファイルがTARアーカイブであることを前提としています。 TARアーカイブが圧縮されているとは想定していません。ソースファイルが実際に標準のTARアーカイブ以外のものである場合、コマンド/オプションは異なる場合があります。

ソースシステムにtarファイルがある場合は、次のことを試してください。

cd /source/dir
cat somefile.tar | ssh user@target_Host "cd /target/dir; tar xvf -"

tarコマンドの正しいオプションに注意してください。 xはtarを抽出し、vは詳細(オプション)、fはファイルを指定します(テープデバイスではありません)。 tarコマンドの入力としてSTDINをtarするため、最後に-が必要です。 tarコマンドは、SSHコマンドの引用符内で実行する必要があるため、tarはローカルホストではなくターゲットホストで実行されます。

ターゲットサーバーから、構文を少し変更します。

cd /target/dir
ssh user@source_Host "cat /source/dir/somefile.tar" | tar xvf -
0
MikeA