我想做一些类似 gzip 文件的操作,然后立即将其 rsync 到另一台服务器,这样创建的 gzip 文件就不会写入本地服务器。我正在考虑做这样的事情......但显然这失败了。
gzip 文件 | rsync -auv another_server
有人对此有任何想法吗?或者这甚至可能吗?
我通常的方法是使用 gzip 和 ssh,如下所示:
gzip -c 文件 | ssh user@remote.host "cat > destination.gz"
这将通过 ssh 将 zip 输出直接发送到远程主机上的文件“destination.gz”中。如果您手动执行此操作,只需输入您的 ssh 密码;如果您想自动执行此操作,则需要按照以下方式设置 ssh 密钥:
http://pkeck.myweb.uga.edu/ssh/
不要把这个个人,但是从你的问题和意见,好像你不明白的rsync实际上是什么样的。它不是用于将文件从一个地方移动到另一个地方——而是用于在两个地方之间同步文件。如果您不想在本地机器上保留副本,那么您就没有进行同步,并且 rsync 不是您想要的工具。
您正在尝试传输文件。为此,您可以将其放在磁盘上并使用 ssh、ftp、sftp、ftps 等,或者您可以按照 Glenn 的建议通过 ssh 将其通过管道传输,这是正确的答案,也是做您想做的事情的唯一正确方法。如果您担心资源利用率(对于高带宽连接,这可能会有所作为),请更改密码:
gzip -c somefile | ssh -c blowfish user@host 'cat > someotherfile'
Run Code Online (Sandbox Code Playgroud)
如果您尝试做某事(例如管道到 rsync)但它不起作用,则可能是您做错了,或者您正在尝试做错误的事情。这是工作的工具问题,重要的是不要排除无论您要做什么,都有适合它的工具。
了解并牢记 UNIX 环境中可用的各种不同工具的用途将使您可以更有效地使用和操纵该环境。许多工具在功能上存在细微差别或重叠,但除非您全神贯注,否则您将错过许多完成任务的最佳方法。
在这种情况下,Rsync 可能不会提供任何好处,因为它发送的内容是唯一的。
压缩文件并将输出发送到 STDOUT 非常简单:
gzip -c file > another-file
Run Code Online (Sandbox Code Playgroud)
如果您追求速度并且能够控制两端,netcat 几乎没有任何开销。
设置目标计算机在端口 1234 上进行侦听
user@bar$ nc -l -p 1234 > file.gz
Run Code Online (Sandbox Code Playgroud)
发送“file.gz”到机器 bar:1234
user@foo$ gzip -c file | nc bar 1234
Run Code Online (Sandbox Code Playgroud)