2011-08-23 75 views
15

我想寫一個Python腳本,它將監視一個rsync傳輸,並提供(粗略)百分比進度的估計。對於我的第一次嘗試,我看着一個rsync --progress命令,並看到它打印信息,如:監視Rsync進度

1614 100% 1.54MB/s 0:00:00 (xfer#5, to-check=4/10)

我寫了一個解析器這樣的消息,並使用到檢查部件產生進度百分比,在這裏,這將完成60%。

不過,也有在這兩個缺陷:

  • 在大額轉賬時,將要檢查分數「分子」似乎並不單調下降,所以百分比完整性會倒着跳。
  • 不會爲所有文件打印此類消息,這意味着進度可以向前跳轉。

我已經看過其他可供選擇的消息使用,但沒有設法找到任何東西。有沒有人有任何想法?

在此先感謝!

+3

這些值會跳轉,因爲rsync開始傳輸數據,同時它仍在評估其必須完成的工作。這與任何你會得到的措施一樣好。 – hop

+0

有沒有辦法讓它預先評估它需要做的工作? --dry-run --stats似乎是這樣做的,不幸的是,它爲傳輸數據產生的值是不正確的。 – paulmdavies

+0

爲什麼你會放慢速度,只是爲了讓它顯示無用的信息? – hop

回答

0

要完全控制傳輸,您應該使用更低級別的差異工具,並自行管理目錄列表和數據傳輸。

基於librsync有任何命令行rdiff或Python模塊pysync

24

當前版本的rsync(編輯在3.1.2的時間)有一個選項--info=progress2它會告訴你整個的進展轉移而不是單個文件。

the man page

還有輸出統計基於整體轉移,而不是單個文件--info = progress2選項。在不輸出文件名的情況下使用此標誌(例如,避免使用-v或指定--info = name0如果您想查看傳輸如何進行而不用滾動屏幕上的大量名稱(您不需要指定 - 爲了使用--info = progress2進度選項。)

因此,如果可能的話你的系統,你可以升級rsync將含有該選項的當前版本。

+0

非常好聽!謝謝! – Avio

+0

如果我只能在MinGW上編譯rsync:/ – msiemens

+0

增量備份沒有顯示正確的進度條 – LOKESH

6

您可以禁用與增量遞歸參數--no-inc-recursive。rsync將對整個目錄結構進行預掃描,因此它知道它必須檢查的文件總數。

這實際上是它遞歸的舊方式。增量遞歸是當前的默認值,用於提高速度。

4

注意這裏需要提醒的是,即使是--info=progress2因爲這不是完全可靠的基於文件的數量百分比rsync的知道約在當正在顯示進度的時間。這不一定是需要同步的文件總數(例如,如果它在深度嵌套目錄中發現大量大文件)。

的一種方式,以確保--info=progress2跳回在進度指示將迫使rsync的掃描所有目錄遞歸地開始同步之前(而不是做一個增量遞歸掃描其默認行爲),通過還提供--no-inc-recursive選項。但請注意,此選項也會增加rsync內存使用情況和運行時間。

+0

這對我很好,感謝解釋選項 –