Echemos un vistazo a cómo funciona rsync y comprendamos mejor las líneas de resultado crípticas:
1 - Una gran ventaja de rsync es que después de una interrupción, la próxima vez continúa sin problemas.
La próxima invocación de rsync no transferirá los archivos de nuevo, que ya se habían transferido, si no se modificaron mientras tanto. Pero volverá a comprobar todos los archivos desde el principio para averiguarlo, ya que no sabe que se ha interrumpido.
2 - Cada carácter es un código que puede traducirse si lee la sección de -i, --itemize-changes
enman rsync
Decodificando su archivo de registro de ejemplo de la pregunta:
> primero ......
> - the item is received
f - it is a regular file
s - the file size is different
t - the time stamp is different
.d..t ......
. - the item is not being updated (though it might have attributes
that are being modified)
d - it is a directory
t - the time stamp is different
> f +++++++++
> - the item is received
f - a regular file
+++++++++ - this is a newly created item
La parte relevante de la página de manual de rsync:
-i, --itemize-changes
Solicita una lista detallada simple de los cambios que se están realizando en cada archivo, incluidos los cambios de atributos. Esto es exactamente lo mismo que especificar --out-format = '% i% n% L'. Si repite la opción, también se generarán archivos sin cambios, pero solo si el rsync receptor es al menos la versión 2.6.7 (puede usar -vv con versiones anteriores de rsync, pero eso también activa la salida de otros mensajes detallados- sabios).
El escape "% i" tiene una salida críptica de 11 letras. El formato general es como la cadena YXcstpoguax, donde Y se reemplaza por el tipo de actualización que se está realizando, X se reemplaza por el tipo de archivo y las otras letras representan atributos que pueden aparecer si se modifican.
Los tipos de actualización que reemplazan la Y son los siguientes:
- A
<
significa que se está transfiriendo un archivo al host remoto (enviado).
- A
>
significa que se está transfiriendo un archivo al host local (recibido).
- A
c
significa que se está produciendo un cambio / creación local para el elemento (como la creación de un directorio o el cambio de un enlace simbólico, etc.).
- A
h
significa que el elemento es un vínculo fijo a otro elemento (requiere --hard-links).
- A
.
significa que el elemento no se está actualizando (aunque puede tener atributos que se están modificando).
- A
*
significa que el resto del área de salida detallada contiene un mensaje (por ejemplo, "borrando").
Los tipos de archivo que reemplazan a la X son: f
para un archivo, a d
para un directorio, un L
para un enlace simbólico, a D
para un dispositivo y a S
para un archivo especial (por ejemplo, sockets con nombre y FIFos).
Las otras letras en la cadena anterior son las letras reales que se generarán si el atributo asociado para el artículo se actualiza o un "." sin cambios. Tres excepciones a esto son: (1) un elemento recién creado reemplaza cada letra con un "+", (2) un elemento idéntico reemplaza los puntos con espacios y (3) un atributo desconocido reemplaza cada letra con un "?" (esto puede suceder cuando se habla con un rsync más antiguo).
El atributo que se asocia a cada letra es el siguiente:
- A
c
significa que un archivo normal tiene una suma de verificación diferente (requiere --checksum) o que un enlace simbólico, dispositivo o archivo especial tiene un valor modificado. Tenga en cuenta que si está enviando archivos a un rsync anterior a 3.0.1, este indicador de cambio estará presente solo para archivos regulares que difieran de la suma de comprobación.
- A
s
significa que el tamaño de un archivo normal es diferente y se actualizará mediante la transferencia del archivo.
- A
t
significa que la hora de modificación es diferente y se actualiza al valor del remitente (requiere - veces). Un valor alternativo de T significa que el tiempo de modificación se establecerá en el tiempo de transferencia, lo que ocurre cuando un archivo / enlace simbólico / dispositivo se actualiza sin --times y cuando se cambia un enlace simbólico y el receptor no puede establecer su tiempo. (Nota: al usar un cliente rsync 3.0.0, es posible que vea el indicador s combinado con t en lugar del indicador T adecuado para este error de establecimiento de tiempo).
- A
p
significa que los permisos son diferentes y se están actualizando al valor del remitente (requiere --perms).
- Un
o
significa que el propietario es diferente y se actualiza al valor del remitente (requiere privilegios de propietario y superusuario).
- A
g
significa que el grupo es diferente y se está actualizando al valor del remitente (requiere --group y la autoridad para configurar el grupo).
- La
u
ranura está reservada para uso futuro.
- Los
a
medios que la información de ACL cambian.
- Los
x
medios que la información de atributo extendido cambiado.
Otra salida es posible: al eliminar archivos, "% i" generará la cadena "* eliminando" para cada elemento que se está eliminando (asumiendo que está hablando con un rsync lo suficientemente reciente que registra las eliminaciones en lugar de generarlas como un mensaje detallado).
Hace algún tiempo, necesitaba comprender el
rsync
resultado de un guión que estaba escribiendo. Durante el proceso de escritura de ese script busqué en Google y encontré lo que @mit había escrito arriba . Usé esa información, así como la documentación de otras fuentes, para crear mi propio manual sobre los indicadores de bits y cómo llegarrsync
a los indicadores de bits de salida para todas las acciones (no hace esto de forma predeterminada).Estoy publicando esa información aquí con la esperanza de que ayude a otros que (como yo) se encuentran con esta página a través de la búsqueda y necesitan una mejor explicación de
rsync
.Con la combinación de la
--itemize-changes
bandera y la-vvv
bandera,rsync
nos da una salida detallada de todos los cambios del sistema de archivos que se identificaron en el directorio de origen en comparación con el directorio de destino. Las banderas de bits producidas porrsync
se pueden decodificar para determinar qué cambió. Para decodificar el significado de cada bit, use la siguiente tabla.Explicación de cada posición de bit y valor en
rsync
la salida:Algunos ejemplos de salida de rsync para varios escenarios:
Capturando
rsync
la salida (enfocada en las banderas de bits):En mi experimentación, tanto el
--itemize-changes
indicador como el-vvv
indicador son necesariosrsync
para generar una entrada para todos los cambios del sistema de archivos. Sin el-vvv
indicador triple verbose ( ), no veía los cambios de directorio, enlace y dispositivo en la lista. Vale la pena experimentar con su versión de rsync para asegurarse de que está observando y anotando todo lo que esperaba.Un uso útil de esta técnica es agregar la
--dry-run
bandera al comando y recopilar la lista de cambios, según lo determinado por rsync, en una variable (sin realizar ningún cambio) para que pueda procesar la lista usted mismo. Algo como lo siguiente capturaría la salida en una variable:En el ejemplo anterior, la salida (stdout) de
rsync
se redirige agrep
(a través de stdin) para que podamos aislar solo las líneas que contienen indicadores de bits.Procesando la salida capturada:
El contenido de la variable se puede registrar para su uso posterior o se puede iterar inmediatamente para los elementos de interés. Utilizo esta táctica exacta en el guión que escribí mientras investigaba más
rsync
. Puede consultar el script ( https://github.com/jmmitchell/movestough ) para ver ejemplos de posprocesamiento de la salida capturada para aislar archivos nuevos, archivos duplicados (mismo nombre, mismo contenido), colisiones de archivos (mismo nombre, diferentes contenidos), así como los cambios en las estructuras de subdirectorios.fuente
1) Wodin, eso no es del todo cierto. Si usa la etiqueta --partial o -P (igual que --partial --progress), rsync reanuda las transferencias interrumpidas.
2) Exactamente, esa es la salida común para la etiqueta --itemize-changes.
fuente
1.) "Reiniciará la sincronización", pero no transferirá archivos del mismo tamaño y marca de tiempo, etc. Primero crea una lista de archivos para transferir y durante esta etapa verá que ya ha transferido algunos archivos. y los saltará. Debe decirle a rsync que conserve las marcas de tiempo, etc. (por ejemplo, usando
rsync -a ...
)Mientras rsync está transfiriendo un archivo, lo llamará algo como en
.filename.XYZABC
lugar defilename
. Luego, cuando haya terminado de transferir ese archivo, le cambiará el nombre. Entonces, si mata rsync mientras está transfiriendo un archivo grande, tendrá que usar la opción --partial para continuar con la transferencia en lugar de comenzar desde cero.2.) No sé qué es eso. ¿Puedes pegar algunos ejemplos?
EDITAR: Según http://ubuntuforums.org/showthread.php?t=1342171, esos códigos se definen en la página de manual de rsync en la sección de la
-i, --itemize-changes
opción.Parte fija si mi respuesta se basa en la de Joao.
fuente