rsync: informa solo los archivos cargados


14

Tengo un problema con rsync: o me muestra todos los archivos en los directorios que estoy sincronizando (si estoy usando la bandera -v) o nada (cuando no estoy usando -v).

Me gustaría tener rsync silencioso, excepto los archivos que realmente tuvieron que cargarse en el otro extremo. ¿Hay una bandera para activar este tipo de informes? No puedo encontrar esto en la documentación.

Respuestas:


11

Sí, mira la -ibandera. Da un informe de cada operación en un formato críptico. Vea la página del manual para la definición exacta del formato.

Para obtener la lista de archivos que se envían al host remoto, puede usar lo siguiente:

rsync <options> -i <src> <dst> | grep '^<' | awk '{ print $2 }'

1
Esto informa nuevamente todos los archivos, no los modificados.
dangonfast

@gonvaled No, solo se envían los archivos que se envían al host remoto (como <fcstpoguax filename, donde los diferentes indicadores muestran por qué deben actualizarse). Si informa todos los archivos, algo puede estar mal con su prueba o su entorno.
Oliver

Creo que tienes razón. He echado un vistazo a la página de manual y se describe como usted dice. Pero mi sistema informa todos los archivos. Tal vez algo malo con el extremo lejano ...
dangonfast

Mmmm cada vez más cerca: la cadena de informes es (para todos los archivos) <f..T....... Según la página de manual, esto está relacionado con las marcas de tiempo.
dangonfast

1
utilizando grep -E '^[^.]|^$'sería también dejar que la estadística (o advertencias, errores, ...) a través de líneas, solamente la eliminación de las líneas muy aburrido a partir de un punto ...
Frank Nocke

9

rsync con un solo -vrealmente imprime solo los archivos transferidos. Si obtiene la lista completa cada vez, entonces probablemente significa que el algoritmo de comparación rsync src / dest predeterminado, que se basa en el tiempo de modificación + tamaño, no es adecuado para su caso. Puede agregar el indicador -c( --checksum) que hace que rsync compare archivos mediante suma de verificación. Tenga en cuenta que esto obviamente incurre en una sobrecarga de E / S.

Ligeramente relacionado está el hecho de que si usa en --info=flistlugar de -vobtener una salida más recortada de los archivos (básicamente omite el encabezado y pie de página de la -vsalida típica ).


1
--info=flistsolo está disponible en rsync> = 3.1, que no está disponible en todas partes. Por ejemplo, macOS se entrega con una versión antigua 2.6.9 porque Rsync v3 no tiene GPL 3.
chiborg

1
Si bien el rumor de Apple GPL es súper jugoso, también recuerde que Enterprise Linux tiene un rango de soporte masivo (14 años) donde las versiones están bloqueadas (y ramificadas) para preservar la certificación y garantizar la compatibilidad (api + abi) durante la vida útil del lanzamiento . En realidad, es la única forma factible de hacerlo, y el efecto secundario es que los números de versión parecen antiguos y las nuevas características no afectan a la empresa durante lo que puede parecer mucho tiempo.
user2066657

2

Una cosa que me viene a la mente es usar un formato de registro más detallado y darme cuenta de lo que quieres obtener.

p.ej:

rsync -a --out-format="%b  %i %f" /etc/ /tmp/qq/ |awk '{if ($1>0) {print $3}}'

esto no es muy robusto, no manejará bien los nombres de archivos con espacios.


1

1. Use la -iopción

Para estas banderas de cambio iconizadas (o: crípticas). Su salida se verá así:

*deleting   DSC00012 (copy).JPG
.d..tp..... ./
.f...p..... DSC00011.JPG
>f+++++++++ DSC00012 (copy2).JPG
>f.stp..... DSC00012.JPG
.f...p..... DSC00014.JPG

Number of files: 5 (reg: 4, dir: 1)
Number of created files: 1 (reg: 1)
... more statistic stuff
sent 636.01K bytes  received 4.63K bytes  1.28M bytes/sec
total size is 2.84M  speedup is 4.44

2. grep cada línea que comienza con un punto.

Deje pasar todas las demás líneas (también en blanco, para legibilidad):

rsync -arz -i --stats -h ... /mnt/FooDrive/ /mnt/backup  | grep -E '^[^.]|^$'

Y aquí estamos :-) - Justo lo que ordenó el médico:

*deleting   DSC00012 (copy2).JPG
>f.stp..... DSC00011.JPG
>f+++++++++ DSC00012 (copy).JPG

Number of files: 5 (reg: 4, dir: 1)
Number of created files: 1 (reg: 1)
...

Evitar puntos en lugar de buscar > tiene el beneficio de permitir también que las estadísticas, pero también posibles errores, advertencias, etc. pasen ...

Tener estadísticas al final es una preferencia personal. No lo use -h --statssi no le gustan estos. Supongo que su interés clave es no ver cientos o miles de archivos sin cambios desplazarse por ...


0

No creo que haya una bandera para hacer esto, pero puede haberla ahora. Así fue como lo hice:

rsync -vv [other options] | grep -v 'uptodate'

1
Mi rsync (versión 3.0.7) no se agrega uptodatea los informes, por lo que no es posible filtrarlo.
dangonfast

Quiero corregir, o al menos aclarar, lo que Mike publicó anteriormente y lo que señaló @ jeckyll2hide. Creo que el problema no es que rsync -v ya no emite la cadena "uptodate", sino que necesita usar rsync -vv. Tenga en cuenta que los dos vs. acabo de verificar que esto funciona en Ubuntu 14.04 con rsync versión 3.1.0. Mike, ¿puedes actualizar tu publicación para reflejar esto?
John Mark Mitchell
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.