指定管道输出位置

指定管道输出位置

我想做这样的事情:

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以这种方式提供服务器。只会与服务器建立一个连接,所有文件都将通过该连接传输。

如果您使用-aor ,--archive那么--files-from您需要显式添加-ror--recursive如果您想要递归,因为该选项(即使它是 的一部分)在使用-a时被禁用。--files-from

相关内容