监控Rsync进度

pau*_*ies 17 python rsync progress

我正在尝试编写一个Python脚本来监视rsync传输,并提供(粗略)估计百分比进度.对于我的第一次尝试,我查看了一个rsync --progress命令,看到它打印的消息如下:

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

我为这样的消息编写了一个解析器,并使用to-check部分来产生一个百分比进度,在这里,这将完成60%.

但是,这有两个缺陷:

  • 在大转移中,检查分数的"分子"似乎没有单调减少,因此百分比完整性可以向后跳跃.
  • 不会为所有文件打印此类消息,这意味着进度可以向前跳转.

我已经看过要使用的其他消息替代方案,但还没有设法找到任何东西.有没有人有任何想法?

提前致谢!

cne*_*son 28

当前版本的rsync(在编辑3.1.2时)有一个选项--info=progress2,它将显示整个传输的进度而不是单个文件.

手册页:

还有一个--info = progress2选项,它根据整个传输输出统计信息,而不是单个文件.使用此标志而不输出文件名(例如,如果你想看看转移是如何进行的,而不是用很多名字滚动屏幕,请避免-v或指定--info = name0.(你不需要指定 - 进度选项,以便使用--info = progress2.)

因此,如果可能在您的系统上,您可以将rsync升级到包含该选项的当前版本.


Izk*_*ata 8

您可以使用参数禁用增量递归--no-inc-recursive.rsync将对整个目录结构进行预扫描,因此它知道它必须检查的文件总数.

这实际上是它递归的旧方式.为增加速度添加了递增递归(当前默认值).


lon*_*win 5

请注意,这里需要注意的是,即使--info=progress2没有,因为基于文件的rsync的数量,这是个完全可靠知道有关在当正在显示进度的时间.这不一定是需要同步的文件总数(例如,如果它在深层嵌套目录中发现大量大文件).

确保--info=progress2不会在进度指示中跳回的一种方法是强制rsync在开始同步之前递归扫描所有目录(而不是执行递增递归扫描的默认行为),同时提供--no-inc-recursive选项.但请注意,此选项还会增加rsync内存使用量和运行时间.


Mih*_*tan 0

为了完全控制传输,您应该使用更底层的 diff 工具并自己管理目录列表和数据传输。

基于 librsync 有命令行rdiff或 python 模块pysync