Gzip 通过管道传输到 Rsync

Gzip 通过管道传输到 Rsync

我想对文件进行 gzip 压缩,然后立即将其 rsync 到另一台服务器,这样创建的 gzip 文件就不会写入本地服务器。我曾想过这样做……但显然会失败。

gzip 文件 | rsync -auv another_server

有人知道吗?或者这有可能吗?

答案1

我通常的方法是使用 gzip 和 ssh,如下所示:

gzip -c 文件|ssh[电子邮件保护]“cat > 目的地.gz”

这会将 zip 输出通过 ssh 直接发送到远程主机上的文件“destination.gz”。如果您手动执行此操作,只需输入您的 ssh 密码;如果您想自动执行此操作,您需要设置 ssh 密钥,如下所示:

http://pkeck.myweb.uga.edu/ssh/

答案2

别介意,但从你的问题和评论来看,你似乎不明白 rsync 到底是什么为了. 它不是用来将文件从一个地方移动到另一个地方的——而是用来同步在两个地方之间传输文件。如果您不想在本地机器上保留副本,则您没有进行同步,rsync 也不是您想要的工具。

您正在尝试传输文件。为此,您可以将其放在磁盘上并使用 ssh、ftp、sftp、ftps 等,或者您可以按照 Glenn 的建议通过 ssh 进行管道传输,这是正确的答案,也是做您想做的事情的唯一正确方法。如果您担心资源利用率(对于高带宽连接,这可能会有所不同),请更改密码:

gzip -c somefile | ssh -c blowfish user@host 'cat > someotherfile'

如果您尝试执行某项操作(例如管道到 rsync)但无法正常工作,则可能是您操作错误,也可能是您在尝试做错事。这是一个工具问题,重要的是不要排除无论您尝试执行什么操作,都有合适的工具。

理解并牢记 UNIX 环境中各种不同工具的用途将使您能够更有效地使用和操作该环境。许多工具在功能上存在细微差异或重叠,但除非您全部注意它们,否则您将错过许多完成任务的最佳方法。

答案3

在这种情况下,Rsync 可能不会带来任何好处,因为它发送的内容是唯一的。

压缩文件并将输出发送到 STDOUT 非常简单:

gzip -c file > another-file

如果您追求速度,并且能够控制两端,netcat 几乎没有开销。

设置目标机器监听 1234 端口

user@bar$ nc -l -p 1234 > file.gz

发送‘file.gz’到机器 bar:1234

user@foo$ gzip -c file | nc bar 1234

答案4

结合 gzip 和 rsync 不起作用。

如果您发送未压缩的文件,那么 rsync 会只发送已更改的位。但是当您使用 gzip 压缩文件时,每次生成的文件都会有很大不同。将其传输到 rsync 最多只能实现与 ssh 类似的结果,甚至可能更糟。

压缩文件每次都不同的原因是它在压缩之前会分析数据。这意味着即使文件中的一个小变化也会导致分析结果发生变化,从而影响压缩的每个字节。

相关内容