Files

如何通過 SCP 從遠端系統傳輸文件的一部分?

  • December 3, 2018

我正在嘗試獲取一個反復更新的日誌文件。我想要那個更新的文件,但不想通過 SCP 從遠端系統一次又一次地下載整個文件。

有什麼想法可以在最少的網路使用中實現這一目標嗎?

僅憑 SCP,實際上並沒有任何解決方案。該協議只允許完整的文件複製,而不是部分傳輸。

如果您願意超越 SCP,有幾個選擇:

  1. 使用如下命令生成僅包含日誌文件新行的文件並傳輸:
ssh user@host tail -n +`wc -l /local/file.log` /remote/file.log >> /local/file.log

這將計算本地文件中的行數,並告訴遠端系統通過 SSH 連接列印該行號之後的所有行,然後通過 shell 重定向將其附加到本地文件。此方法在某些 shell 中可能有點挑剔,並且有點不雅(在文件被複製時到達文件的寫入可能最終僅部分傳輸,但不會在下一次呼叫時完全傳輸)。 2. rsync--checksum選項一起使用。這可以實現數據的增量傳輸,並且由於它使用的滾動雜湊校驗和應該傳輸絕對最少的數據。與第一種方法不同,這根本不是活潑的,但它還需要 rsync 在兩端都存在。 3. 設置支持字節範圍請求的(安全的)Web 伺服器。然後,您可以使用 HTTP HEAD 請求來獲取新的文件大小(如果文件沒有更改,可以選擇使用 If-Modified-Since 標頭將其變為無操作),並請求從您的副本擴展的範圍以 HEAD 請求報告的總長度結束。這涉及最多的設置,並且可以傳輸部分線路,但可以保證您不會失去任何數據。 4. 想辦法為生成日誌文件的應用程序設置遠端日誌記錄,並將本地系統設置為日誌主機。當然,這只有在您的本地系統一直處於打開狀態時才有效,但它也可以保證您擁有最新版本的日誌,而無需手動進行任何更新。

引用自:https://unix.stackexchange.com/questions/420454