タールパイプとスプリットパイプをscpで接続

タールパイプとスプリットパイプをscpで接続

それで、SCPを介して複数のファイルを転送してみました。これらのファイルの一部は大きすぎて受信者に保存できません(Android携帯、4GBのファイルサイズ制限)。

送信者のスペースがほとんどないため、ローカルで中間ファイルを作成できません。

このデータをパッケージ化して分割を介してストリーミングして、電話機が受け入れることができる小さなフラグメント(たとえば、基本コマンド)を取得したいと思います。

tar -cvf - ~/batch/ | split --bytes=1024m - batch.tar.seg

しかし、scpにパイプして電話に送信する方法がわかりません。コメントによるとこの投稿、可能ですが、最初に彼が何を言っているのかよくわかりません。

どんなアイデアがありますか?

答え1

受信者に1つがある場合は、split次のことができます。

tar -cvf - ~/batch/ | gzip |
  ssh recipient 'cd /destination &&
    split --bytes=1024m - batch.tar.gz.seg'

答え2

上記のコメントは、scpとsshを使用してSTDINで読むことを言及していますが、完全にあなたの場合ではありません。その理由は、splitSTDOUTに書き込まないことです。したがって、より多くのパイプラインを追加しても、そこからデータを取得することはできません。 Stephaneは上記の答えで正しいアドバイスをしました。空き容量が不足しているため、ソースに何も保存せず、データを圧縮してgzipに転送してから、チャンクサイズが重要なシンクで分割を実行してください。

答え3

引用した投稿は問題をよく説明します。パイプを使用すると、ファイルをコピーせずに標準ストリームをリダイレクトします。これはscp正しいツール(ファイルコピー用)ではありませんが、ssh正しいプログラムです。ストリームをssh標準入力にリダイレクトしてリモートホストに入力を出力し、指定したコマンドの標準入力に供給します。

local$ tar -cvzf - ~/batch/ | ssh target 'split --bytes=1024m - batch.tar.seg'

tarオプションに圧縮フラグ「z」を追加しましたが、分割がまったく必要ない場合があります。

関連情報