
私はこのようなことをしたい:
echo myserver:~/dir/2/ | rsync -r HERE /local/path/
コマンドで指定された位置に出力をリダイレクトしたいと思います。エコ内容は「ここ」に移動します。これを行う最も簡単な方法は何ですか?
答え1
xargs
この要件を正確に使用できます。-I
パイプから受信した入力としてプレースホルダを使用できます。
echo "myserver:${HOME}/dir/2/" | xargs -I {} rsync -r "{}" /local/path/
(または)ディレクトリパス~
に展開されない二重引用符を使用しないでください。HOME
echo myserver:~/dir/2/ | xargs -I {} rsync -r "{}" /local/path/
答え2
これ
rsync -r "$(echo myserver:~/dir/2/)" /local/path/
最も簡単な方法です。
パイプは標準出力を標準入力に接続します。ここでは、出力がパラメータに入りたいので、古典的なパイプ以外のものが必要です。
それはコマンドの置き換え($()
)。
答え3
rsync
次のコマンドを使用して、ファイルまたは標準入力としてダウンロードするファイルのリストを提供できます--files-from
。
echo "dir/2/" | rsync --files-from=- -r user@server: /local/path/
標準入力から読み取る原因となります-
。この方法ではサーバーをプロビジョニングrsync
できません。rsync
サーバーには1つの接続しか確立されず、すべてのファイルはその接続を介して送信されます。
-a
orを使用している場合、orを使用するとその--archive
オプション(一部にもかかわらず)が無効になるため、再帰が必要な場合は明示的に追加する--files-from
必要があります。-r
--recursive
-a
--files-from