![指定管道输出位置](https://linux22.com/image/120067/%E6%8C%87%E5%AE%9A%E7%AE%A1%E9%81%93%E8%BE%93%E5%87%BA%E4%BD%8D%E7%BD%AE.png)
我想做这样的事情:
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
以这种方式提供服务器。只会与服务器建立一个连接,所有文件都将通过该连接传输。
如果您使用-a
or ,--archive
那么--files-from
您需要显式添加-r
or--recursive
如果您想要递归,因为该选项(即使它是 的一部分)在使用-a
时被禁用。--files-from