color python progress rsync

python - color - Monitoreando el progreso de Rsync



subplot title python (4)

La versión actual de rsync (en el momento de la edición 3.1.2) tiene una opción --info=progress2 que le mostrará el progreso de toda la transferencia en lugar de archivos individuales.

De la página del manual :

También hay una opción --info = progress2 que genera estadísticas basadas en la transferencia completa, en lugar de archivos individuales. Use este indicador sin mostrar un nombre de archivo (por ejemplo, evite -v o especifique --info = nombre0 si desea ver cómo se está realizando la transferencia sin desplazarse por la pantalla con muchos nombres) (No necesita especificar el - opción de progreso para utilizar --info = progress2.)

Entonces, si es posible en su sistema, puede actualizar rsync a una versión actual que contenga esa opción.

Estoy tratando de escribir un script de Python que supervise una transferencia rsync y proporcione una estimación (aproximada) del porcentaje de progreso. Para mi primer intento, miré un comando rsync --progress y vi que imprime mensajes como:

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

Escribí un analizador para tales mensajes y utilicé la parte de verificación para producir un porcentaje de progreso, aquí, esto sería 60% completo.

Sin embargo, hay dos defectos en esto:

  • En transferencias grandes, el "numerador" de la fracción de verificación no parece disminuir monótonamente, por lo que el porcentaje completo puede saltar hacia atrás.
  • Este mensaje no se imprime para todos los archivos, lo que significa que el progreso puede avanzar.

He echado un vistazo a otras alternativas de mensajes para usar, pero no he podido encontrar nada. ¿Alguien tiene alguna idea?

¡Gracias por adelantado!


Para tener un control total sobre la transferencia, debe utilizar una herramienta de diferencias de más bajo nivel y administrar el listado de directorios y la transferencia de datos usted mismo.

Sobre la base de librsync, está la línea de comandos rdiff o el módulo python pysync


Puede deshabilitar la recursión incremental con el argumento --no-inc-recursive . rsync realizará una exploración previa de toda la estructura del directorio, de modo que sepa la cantidad total de archivos que debe verificar.

Esta es en realidad la forma antigua en que fue recursivo. La recursión incremental, el valor predeterminado actual, se agregó para la velocidad.


Tenga en cuenta la advertencia de que incluso --info=progress2 no es del todo confiable, ya que este es un porcentaje basado en el número de archivos que rsync conoce en el momento en que se muestra el progreso. Este no es necesariamente el número total de archivos que debían sincronizarse (por ejemplo, si descubre un gran número de archivos grandes en un directorio profundamente anidado).

Una forma de asegurarse de que --info=progress2 no retroceda en la indicación de progreso sería forzar a rsync a escanear todos los directorios de forma recursiva antes de iniciar la sincronización (en lugar de su comportamiento predeterminado de hacer un escaneo recursivo incremental), también proporcionando la --no-inc-recursive . Sin embargo, tenga en cuenta que esta opción también aumentará el uso de la memoria rsync y el tiempo de ejecución.