Gzip 透過管道傳送到 Rsync

Gzip 透過管道傳送到 Rsync

我想做一些類似 gzip 檔案的事情,然後立即將其同步到另一台伺服器,這樣建立的 gzip 檔案就不會寫入本機伺服器上。我正在考慮做這樣的事情......但顯然這失敗了。

gzip 檔案 | rsync -auv another_server

有人對此有什麼想法嗎?或者這有可能嗎?

答案1

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

gzip -c 檔案 | SSH[電子郵件受保護]“貓>目的地.gz”

這將透過 ssh 直接將 zip 輸出傳送到遠端主機上的檔案「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 類似的結果,甚至可能更糟。

壓縮檔案每次都不同的原因是它在壓縮之前對資料進行了分析。這意味著即使檔案中的微小更改也可能意味著配置檔案的更改,從而影響壓縮的每個位元組。

相關內容