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.

dangonfast
fuente

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 }'
Oliver
fuente
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 ).

Amr Mostafa
fuente
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.

pQd
fuente
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 ...

Frank Nocke
fuente
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'
Miguel
fuente
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