web-dev-qa-db-ja.com

パイプの出力位置を指定してください

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

echo myserver:~/dir/2/ | rsync -r HERE /local/path/

コマンドの指定した場所に出力をリダイレクトしたい。エコーは「ここ」に行きます。これを行う最も簡単な方法は何ですか?

8
Lumify

xargsまたは正確にこの要件を使用できます。 -Iパイプラインから受け取った入力のプレースホルダーとして、

echo "myserver:${HOME}/dir/2/" | xargs -I {} rsync -r "{}" /local/path/

(または)~二重引用符なしで、HOMEディレクトリパスに展開されません。

echo myserver:~/dir/2/ | xargs -I {} rsync -r "{}" /local/path/
7
Inian

この

_ rsync -r "$(echo myserver:~/dir/2/)" /local/path/
_

それを行う最も簡単な方法です。

パイピングは、標準出力を標準入力に接続します。ここでは、出力を引数に渡したいので、従来のパイピング以外のものが必要です。

その何かはコマンド置換$())です。

7
PSkocik

--files-fromを使用して、ファイルまたは標準入力でダウンロードするファイルのリストをrsyncに指定できます。

echo "dir/2/" | rsync --files-from=- -r user@server: /local/path/

-は、rsyncを標準入力から読み取ります。この方法では、サーバーにrsyncを与えることはできません。サーバーへの接続は1つだけで、すべてのファイルはその接続を介して転送されます。

-aまたは--archive--files-fromと一緒に使用する場合、そのオプション以降の再帰が必要な場合でも、-rまたは--recursiveを明示的に追加する必要があります。 of -a--files-fromを使用すると無効になります。

2
Kusalananda