Rsync 到标准输出?

7 linux shell rsync tar pipe

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

为了形象化,通过 ssh 访问,我可以:

ssh remote_host cat backup.file.tar.gz | tar xzf -
Run Code Online (Sandbox Code Playgroud)

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

使用rsync时可以实现吗?

Bri*_*ian 6

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

mkfifo mypipe
tar xzf mypipe &
rsync --inplace server:/remote/file.tar.gz mypipe
Run Code Online (Sandbox Code Playgroud)

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


Den*_*son 0

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

scp file /dev/stdout
Run Code Online (Sandbox Code Playgroud)

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

  • @depesz:抱歉,我不明白你在哪里提到过这一点。 (3认同)