Ya he buscado esta opción, pero solo he encontrado soluciones que implican parches personalizados . El hecho de que no se muestre en --help y no se pueda encontrar más información probablemente indica que las respuestas son 'no', pero me gustaría ver esto confirmado.
¿Es posible mostrar el progreso total de la transferencia de archivos con rsync?
Respuestas:
Danakim es correcto. No hay formas triviales de agregar un indicador de progreso total.
La razón de esto es que cuando rsync mira una lista de archivos para sincronizar, no sabe de antemano qué archivos necesitarán cambiar. Si está haciendo transferencias delta, los deltas deben calcularse con anticipación para obtener una imagen total del trabajo que debe realizarse.
En otras palabras, la forma más fácil de calcular cuánto trabajo hay que hacer es hacerlo realmente.
fuente
--size-only
o algo similar es aún más inexacto.Ahora hay una forma oficial de hacer esto en rsync (versión 3.1.0, versión 31 del protocolo, probado con Ubuntu Trusty 14.04).
Intenté con mi
/usr
carpeta porque quería esta característica para transferir sistemas de archivos completos, y/usr
parecía ser una buena muestra representativa.El
--info=progress2
da un buen porcentaje general, incluso si es solo un valor parcial. De hecho, mi/usr
carpeta tiene más de 6 conciertos:y
rsync
tomé mucho tiempo para escanearlo todo. Casi todo el tiempo, el porcentaje que he visto se ha completado en un 90%, pero es reconfortante ver que se está copiando algo :)Referencias
fuente
--info=progress2
no funciona-v
--no-i-r
interruptor también, de modorsync
que no escanee de forma incremental sino completa antes de copiar y sepa + muestra cuánto trabajo queda.--human-readable
(o-h
) para ver el tamaño total en MB / GB ... en progreso.Puedes hacerlo con 'pv' (
apt-get install pv
con Debian y ubuntu). Recomiendo controlar la cantidad de archivos transferidos, ya que la cantidad de datos transferidos no está correlacionada con el tamaño de los archivos, sino en el delta entre el origen y el destino. Y contar archivos contará el mismo progreso para un gran delta y otro con un pequeño delta. Lo que significa que, en cualquier caso, la estimación de ETA podría estar muy lejos. La ETA basada en el tamaño solo funciona si su destino está vacío, en este caso delta == tamaño de origen.La idea general es emitir una línea por archivo 'transferido' desde rsync, y contar esas líneas con 'pv':
Tiendo a hacer copias de seguridad de sistemas de archivos completos (por varias razones), en este caso puede usar el más barato
df
para obtener la cantidad de archivos (en lugar dedu
ofind
que atravesará su jerarquía de origen otra vez después de que rsync lo hizo). La opción -x parece asegurarse de que rsync permanezca en el mismo sistema de archivos fuente (y no siga otros montajes internos):Si desea contar archivos en / source de forma general, use
find /source|wc -l
(advertencia de nuevo: puede ser lento y pesado en E / S).fuente
df -i /source
obtiene el número de inodes (archivos) de toda la partición en la que reside / source. De lo contrario, use 'find' para contar archivos dentro de un directorio dentro de la expresión "$ ()".du
ofind
- digamos que usted está terminando una copia incompleta o hacer una actualización en contexto con eliminaciones - es utilizarrsync -ai --dry-run
para obtener la misma lista de archivos del proceso principal se pasa apv
Lo siguiente se aplica a rsync versión 3.0.0 y superior. Las opciones que se describen a continuación se introdujeron en esa versión el 1 de marzo de 2008.
Junto con --info = progress2 también puede usar la opción --no-inc-recursive (o su abreviatura --no-ir alias) para deshabilitar la recursividad incremental.
Esto generará la lista completa de archivos al principio, en lugar de descubrir de manera incremental más archivos a medida que avanza la transferencia. Como conocerá todos los archivos antes de comenzar, proporcionará un mejor informe del progreso general. Esto se aplica al número de archivos; no informa ningún progreso en función del tamaño de los archivos.
Esto implica una compensación. Crear la lista completa de archivos con anticipación es más costoso para la memoria y puede retrasar significativamente el inicio de la transferencia real. Como era de esperar, cuantos más archivos haya, mayor será el retraso y más memoria requerirá.
Lo siguiente es del manual de rsync (fuente: http://rsync.samba.org/ftp/rsync/rsync.html ):
Consulte también https://rsync.samba.org para conocer las diferencias de versión específicas (desplácese hacia abajo y consulte los enlaces de Noticias de lanzamiento).
fuente
Para transferencias largas, estoy contento con correr
du -s
en ambos lados. Inclusowatch -n1 du -s
, si me siento realmente ansioso.watch
ejecuta un comando (du -s
aquí) periódicamente (cada 1 segundo aquí) y muestra la salida a pantalla completa.fuente
watch
comando!Básicamente no. Solo puede mostrar el progreso por archivo con el indicador --progress, pero eso es todo.
Supongo que puede escribir un envoltorio alrededor o usar cualquiera de los parches que ya encuentra, pero debe preguntarse si realmente vale la pena, ¿realmente necesita un progreso total para rsync?
fuente
--progress
trabajar--info=progress2
, le mostrará el progreso global. Usted tendrá que desactivar el algoritmo recursivo incrementales para que sea útil, por lo que--info=progress2 --no-inc-recursive
Usé la respuesta de zerodeux y escribí mi propio pequeño script bash:
fuente
También busqué cómo mostrar el progreso total con rsync y encontré un contestador útil en esta publicación: https://stackoverflow.com/questions/7157973/monitoring-rsync-progress
Básicamente, puede usar --info = progress2 en la versión de desarrollo de rsync 3.1.0 . Esto es lo que ha dicho el doctor :
fuente
--info=name0
es oro 🌈👑Usé la respuesta de zerodeux y escribí mi propio script BASH:
Cambié el funcionamiento en seco de TODO a
¡Encuentra el número de archivos muy rápido!
fuente
find
solo funciona si estásrsync
localmente.rsync --dry-run
también funciona con fuentes remotas ...Si no tiene la última versión de rsync (p. Ej., OS X tiene 2.6.9) y no puede usarla
--info=progress2
, aquí hay otra alternativa para salvarse de las páginas de texto desplazable sobre el progreso:rsync -aPh <source> <destination> | xargs -L1 printf "\33[2K\rTransferring: %s"
Esto imprimirá, en una línea, el nombre del último archivo que se transfiere:
Transferring: the-latest.file
fuente
Utilizar
Para ver qué archivos rsync tiene abiertos actualmente (mostrará el tamaño del archivo) rsync copia en un archivo oculto localmente
fuente
for i in $(pgrep 'rsync'); do ls -l /proc/$i/fd; done
pero su solución es más simple.Haría de esto un comentario, pero no tengo suficiente reputación. En respuesta al comentario de naught101 a la respuesta elegida, la opción --progress muestra cuántos archivos se han transferido del monto total a transferir. No me di cuenta de esto hasta que miré esta publicación y miré la salida con más cuidado.
La estadística 'para verificar' muestra cuántos archivos quedan del total. Esto es muy útil cuando se sincroniza con un nuevo destino para que sepa que todos los archivos se copiarán por completo.
Desde la página del manual:
fuente
Tenga en cuenta la advertencia aquí de que incluso --info = progress2 no es del todo confiable ya que este porcentaje se basa en la cantidad de archivos que rsync 'conoce' en el momento en que se muestra el progreso. Esta no es necesariamente la cantidad total de archivos que debían sincronizarse (por ejemplo, si descubre una gran cantidad de archivos grandes en un directorio profundamente anidado). Una manera 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 comenzar la sincronización (en lugar de su comportamiento predeterminado de hacer un escaneo incrementalmente recursivo), al proporcionar también la opción --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.
fuente
--no-inc-recursive
opción o su--no-i-r
alias más corto . (Ver otra respuesta)Utilizo un script que extrae la información de / proc // io para el proceso rsync (o cualquier otro proceso para el caso) y saber el monto total a transferir es calcular el progreso.
fuente
Si su versión de
rsync
no acepta la--info=progress2
opción, puede usartqdm
:Instalar:
Usar:
fuente
Quizás puedas combinar
pv
con rsync. Especialmente el parámetro--size
podría ser útil. Echando un vistazo a los documentos, algo asípv --size $(du -sb . | awk '{print $1}') | rsync -av . host:/your/path
debería funcionar.Aquí encontrarás los documentos y el software.
No he intentado esto por mi cuenta.
fuente
Podría llegar un poco tarde aquí, pero los futuros buscadores de respuestas podrían beneficiarse.
Esto también me estaba molestando, así que pensé en ensuciarme y escribir mi primer guión. El paquete zenity debe estar instalado (sudo apt-get install zenity), pero estoy seguro de que probablemente ya esté allí. Además, uso wmctrl (control del administrador de ventanas) para cambiar el título del cuadro de diálogo de progreso cuando está hecho, es fácilmente instalable pero no hará la diferencia si no lo hace. Solo me gusta ver cuándo está hecho en mi panel.
El script básicamente solicita un directorio de origen y destino, calcula el porcentaje del destino sobre el tamaño del origen utilizando du y muestra una barra de progreso.
Nota: Esto solo funciona para la sincronización completa de directorio / archivo (generalmente lo uso para hacer copias de seguridad de la memoria caché de apt), por lo que no hay opción --exclude = / file / in / Source-directory. Tampoco funcionará si hay archivos / directorios en el directorio de destino que no están en el directorio de origen. No estoy seguro de si funciona para fuentes / destinos remotos ya que nunca he tenido la necesidad o los recursos para probarlo.
PD. Este script puede estar muy mal escrito o muy ineficiente (script-virgin aquí), pero al menos sirve para su propósito y, por supuesto, puede editarlo y mejorarlo para satisfacer sus necesidades. PSS Además, no pude obtener el botón cancelar para matar a rsync, así que lo eliminé.
fuente