それで、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で読むことを言及していますが、完全にあなたの場合ではありません。その理由は、split
STDOUTに書き込まないことです。したがって、より多くのパイプラインを追加しても、そこからデータを取得することはできません。 Stephaneは上記の答えで正しいアドバイスをしました。空き容量が不足しているため、ソースに何も保存せず、データを圧縮してgzipに転送してから、チャンクサイズが重要なシンクで分割を実行してください。
答え3
引用した投稿は問題をよく説明します。パイプを使用すると、ファイルをコピーせずに標準ストリームをリダイレクトします。これはscp
正しいツール(ファイルコピー用)ではありませんが、ssh
正しいプログラムです。ストリームをssh
標準入力にリダイレクトしてリモートホストに入力を出力し、指定したコマンドの標準入力に供給します。
local$ tar -cvzf - ~/batch/ | ssh target 'split --bytes=1024m - batch.tar.seg'
tarオプションに圧縮フラグ「z」を追加しましたが、分割がまったく必要ない場合があります。