私はこのようなことをしたいです:
echo myserver:~/dir/2/ | rsync -r HERE /local/path/
コマンドの指定した場所に出力をリダイレクトしたい。エコーは「ここ」に行きます。これを行う最も簡単な方法は何ですか?
xargs
または正確にこの要件を使用できます。 -I
パイプラインから受け取った入力のプレースホルダーとして、
echo "myserver:${HOME}/dir/2/" | xargs -I {} rsync -r "{}" /local/path/
(または)~
二重引用符なしで、HOME
ディレクトリパスに展開されません。
echo myserver:~/dir/2/ | xargs -I {} rsync -r "{}" /local/path/
この
_ rsync -r "$(echo myserver:~/dir/2/)" /local/path/
_
それを行う最も簡単な方法です。
パイピングは、標準出力を標準入力に接続します。ここでは、出力を引数に渡したいので、従来のパイピング以外のものが必要です。
その何かはコマンド置換($()
)です。
--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
を使用すると無効になります。