web-dev-qa-db-ja.com

tarを介してscp / sshファイル転送(プル)をパイプする方法(リモート->ローカルマシンから開始されたローカル転送)

Scpプル操作(以下のtarなしのサンプル)をtarにパイプして、約10個のディレクトリに対して1つのtarファイルのみが書き込まれるようにします。

user@localhost:/home/user> scp -r remoteuser@remotehost:dir_to_transfer ./

リモートマシンに、転送するディレクトリごとに約10,000個の小さな(〜28k)ファイルがあるディレクトリがあります。ファイルの割り当てが原因で、リモートホスト(remotehost)でtarコマンドを実行するための空き領域があまりありません。ファイアウォールのルールにより、ローカルマシン(localhost)からのみ転送を開始できます。

ファイルの数が非常に多いため、転送が非常に長くなります。

データを「プッシュ」するときにこれを行う方法の例を見つけましたが、データを「プル」するときにこれを行う方法を知りたいです。

ローカルマシン情報:

  • OS:OpenSuSe 13.2(x86_64)

  • bash 4.2.53(1)

  • OpenSSH_6.6.1p1、OpenSSL 1.0.1k-fips 2015年1月8日

リモートマシン情報:

  • OS:CentOSリリース5.11(最終版)
  • bash 3.2.25(1)
  • OpenSSH_4.3p2、OpenSSL 0.9.8e-fips-rhel5 2008年7月1日
2
Gabe

user@localhostからお試しください

 > ssh -l remoteuser remotehost "tar cf - dir_to_transfert" > remote.tar

どこ

  • >はプロンプトです
  • ssh -l remoteuser remotehostリモートホストに接続します
  • "tar cf - dir_to_transfert"標準出力へのリモートタリンを実行します
  • > remote.tarsshの出力をlocalfile名remote.tarにリダイレクトします

これは、リモートホストでtarが許可されている場合に機能します。

4
Archemar