パイプライン出力の位置決め

パイプライン出力の位置決め

私はこのようなことをしたい:

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つの接続しか確立されず、すべてのファイルはその接続を介して送信されます。

-aorを使用している場合、orを使用するとその--archiveオプション(一部にもかかわらず)が無効になるため、再帰が必要な場合は明示的に追加する--files-from必要があります。-r--recursive-a--files-from

関連情報