Rsync 到标准输出?

Rsync 到标准输出?

我可以通过 rsync 协议访问备份服务器(仅 rsync,没有其他协议)。现在,我想从那里获取文件(即 .tar.gz)并将其直接传递给 tar 命令,而不将存档保存在本地文件系统中。

形象地说,通过 ssh 访问我可以:

ssh remote_host cat backup.file.tar.gz | tar xzf -

并且我将在本地获得未压缩的备份,而无需在本地机器上实际存储 .tar.gz。

使用rsync可以实现吗?

答案1

通常你可以使用命名管道,如下所示:

mkfifo mypipe
tar xzf mypipe &
rsync --inplace server:/remote/file.tar.gz mypipe

但是,rsync 太聪明了,因为它识别出远程文件是普通文件,而本地文件是管道。因此,它首先删除管道,然后传输远程文件。 scp不存在此问题,并且会愉快地将数据发送到命名管道(不幸的是,这在这里对您没有帮助)。

答案2

我不这么认为,但你也许可以使用scp

scp file /dev/stdout

会将文件复制到标准输出。您可以将文件源所需的远程用户和主机信息添加到 的命令行参数中scp

答案3

简而言之:你不能。rsync 通过在 rsync 的两个实例(客户端和服务器端)之间进行对话来工作,以找出差异。tar 不能说“rsyncish”。

相关内容