Gzippipe道到Rsync

我想要做一些像gzip的文件,然后立即rsync到另一台服务器,这样创build的gzip文件将不会写在本地服务器上。 我正在考虑这样做…但显然这失败了。

gzip文件| rsync -auv another_server

有人有这个想法吗? 或者这甚至有可能?

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

gzip -c文件| ssh [email protected]“cat> destination.gz”

这将通过ssh将zip输出直接发送到远程主机上的文件“destination.gz”。 如果你手动这样做,只需input你的SSH密码; 如果你想自动执行,你需要设置ssh密钥,像这样:

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

不要采取这个个人,但从你的问题和意见,似乎你不明白什么是rsync实际上。 这不是将文件从一个地方移动到另一个地方 – 这是为了在两个地方之间同步文件。 如果你不想在本地机器上保留一个副本,那么你不同步,rsync不是你想要的工具。

您正在尝试传输文件。 为此,你可以把它放在磁盘上,并使用ssh,ftp,sftp,ftps等等,或者你可以像Glenn所说的那样通过ssh来pipe理它,这是正确的答案,也是唯一正确的方法。 如果您担心资源利用率(对于高带宽连接,这可能会产生影响),那么更改密码:

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

如果你试图做一些事情(比如pipe到rsync)并且它不起作用,那么你可能做错了,或者你可能试图做错误的事情。 这是一个工作的工具问题,重要的是不要排除,无论你想要做什么,都有一个适当的工具。

了解并记住UNIX环境中各种不同工具的用途,可以让您更有效地使用和操作该环境。 很多工具在function上有微妙的差异或者重叠,但是除非你全部注意,否则你会错过很多完成任务的最佳方式。

在这种情况下,Rsync可能没有任何好处,因为它发送的内容将是唯一的。

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

 gzip -c file > another-file 

如果你正在寻找速度,并控制两端,netcat几乎没有开销。

在端口1234上设置要监听的目标计算机

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

发送'file.gz'到机器栏:1234

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

rsync有一个-z选项,将传输压缩的文件。 如果你想这样做,以加快转移,你应该使用-z而不是乱七八糟的gzip。

结合gzip和rsync不起作用。

如果你发送未压缩的文件,那么rsync的工作原理是只发送已经改变的位。 但是当你用gzip文件的时候,结果文件每次都会有很大的不同。 把它configuration到rsync最好是达到与ssh类似的结果,甚至可能更糟糕。

压缩文件每次不同的原因是因为它在压缩之前对数据进行configuration。 这意味着即使文件发生小的变化,也可能意味着configuration文件发生变化,影响到每个被压缩的字节。