デフォルトでは、リモートシステムのディレクトリをtar / gzとして指定し、リモートシステムからローカルシステムに再接続する必要なく、ローカルシステムにファイルを保存したいと思います。 SSHを介してこれを行う方法はありますか? tarファイルはリモートコンピュータに保存する必要はなく、ローカルコンピュータにのみ保存できます。可能ですか?
答え1
tar
sshコマンドを使用してこれを実行でき、標準出力にアーカイブを作成するように指示できます。
ssh remote.example.com 'cd /path/to/directory && tar -cf - foo | gzip -9' >foo.tgz
別の方法は、リモートシステムのファイルシステムをマウントすることです。これは、他のシステムで多くのファイル操作を実行したい場合に便利ですが、ワンタイムアーカイブの作成には過度の作業です。SSHFS(ㅏヒューズファイルシステム)。 SSHレベルで圧縮を有効にする必要があります。
mkdir ~/net/remote.example.com
sshfs -C remote.example.com:/ ~/net/remote.example.com
tar -czf foo.tgz -C ~/net/remote.example.com/path/to/directory foo
答え2
リモート宛先にコピーするには、このコマンドを使用します。
tar -c --zstd <src files> | ssh user@target_host "cd target_dir && tar -x --zstd"
タールマーク:
-c:新しいtar出力を生成する(デフォルトはstdout)
--zstd:zstd圧縮を使用する(tarのアルゴリズムgzipより高速です。)
-x:出力抽出(デフォルトは標準入力)
ベンチマーク用の回線速度測定:
tar -c --zstd <src files> | pv --timer --rate | ssh user@target_host "cd target_dir && tar -x --zstd"
圧縮ベンチマーク
環境:ノートパソコンとデスクトップ間のローカルWi-Fi(〜40MiB / sに制限)
圧縮:0:04:59
再生時間: 0:03:04
答え3
転送用にディレクトリまたはファイルを圧縮してコピーする簡単な方法:
$ ssh domain.net 'ls foo'
file1 file2
$ ssh domain.net 'tar czf - foo' | tar xz
$ ls foo
file1 file2