1 votos

rsync listando el directorio sin cambios

He estado tratando de entender este comportamiento de rsync, donde sigue listando directorios con diferentes marcas de tiempo y los mismos tamaños a pesar de proporcionar un --size-only bandera.

# lists some directory without listing any changed files
> rsync -av [path 1] [path 2] --dry-run --size-only
> building file list ... done
> folder1/folder1a/
> folder1/folder1b/

# checks reasons with -i
# ...
> .d..t....folder1/folder1a/
> .d..t....folder1/folder1b/

Como puedes ver, --itemize-change muestra que la única diferencia entre las carpetas de origen y destino es la marca de tiempo. Pero sigue apareciendo en mi ejecución regular de rsync a pesar de proporcionar --size-only . ¿Hay alguna manera de arreglar esto? Parece que sigue modificando la carpeta de destino si la ejecutara, lo que provoca una recarga de la carpeta en mis servicios de copia de seguridad en la nube. Gracias.

EDITAR: La versión de rsync es 2.6.9. El origen es una carpeta con subcarpetas dentro de ella, y dentro de la cual hay archivos al azar. El destino es mi carpeta de OneDrive. Debería ser idéntica a la fuente, pero después de ejecutar rsync para transferir las carpetas, parece que OneDrive toca las carpetas y hace que el futuro rsync las vea como diferentes (y nada más manual está sucediendo cuando se ejecuta rsync). Eso no me importa, pero no quiero que rsync las siga actualizando cuando se ejecute en el futuro. De ahí que añada el --size-only para ignorar las diferencias de fecha. Lo que estoy tratando de entender es por qué estos dir's siguen siendo listados, a pesar de que el cambio reportado por --itemize-change es sólo la diferencia de la marca de tiempo ( .d..t.... )? Es que no quiero que se vuelvan a transferir cada vez que ejecute rsync simplemente porque tienen diferentes marcas de tiempo.

EDITAR 2: Al principio los subí a OneDrive (no con rsync), luego ejecuté rsync con --size-only en la carpeta más tarde. Como resultado, el tiempo de modificación de los archivos de destino nunca se modifica. Mientras que --size-only omite el archivo en sí, la carpeta se sigue viendo como "diferente". Así que creo que aunque la única diferencia en las carpetas en sí es la marca de tiempo ( .d..t.... ), sigue actualizando la carpeta, ya que los archivos que hay dentro se perciben como diferentes (incluso con --size-only ). Una vez que rsync'd todo sin --size-only una vez, el problema desapareció ya que el tiempo de mod de los archivos en el interior han cambiado.

Pero este comportamiento no es deseable, ya que la carpeta y los propios archivos son idénticos aparte de las marcas de tiempo, por lo que --size-only debería ignorar la carpeta por completo. Sólo pretendo utilizar rsync para rellenar los archivos que faltan después de subirlos a OneDrive (web), y no rsync desde el principio (ya que a veces sincronizar los cambios de la unidad local con OneDrive es muy muy lento en comparación con la subida). ¿Hay alguna manera de evitar esto? ¿Cómo puedo evitar que rsync actualice directorios cuyo contenido es idéntico en tamaño?

1voto

Joel Puntos 112

El rsync que está utilizando: rsync -av ...

Si se refiere a man rsync tenga en cuenta lo siguiente:

-a, --archive modo de archivo; igual que -rlptgoD (sin -H)

En otras palabras: -a implica las opciones: -rlptgoD

Tenga en cuenta que la opción -t se define en man rsync de la siguiente manera:

-t, --times preservar el tiempo

Ahora, para el --size-only opción, man rsync nos dice:

-sólo tamaño
Normalmente, rsync no transferirá ningún archivo que tenga el mismo tamaño y la misma fecha de modificación. Con la opción --size-only, los archivos no se transferirán si tienen el mismo tamaño, independientemente de la marca de tiempo. Esto es útil cuando se empieza a usar rsync después de usar otro sistema de réplica que puede no preservar las marcas de tiempo exactamente.

No he tenido tiempo de comprobarlo (te dejo que lo hagas si no te importa), pero lo que creo que significa es que mientras no se transfiere ningún archivo (es una carpeta) debido a --size-only El -t (implícita con -a ) está provocando que la marca de tiempo de la carpeta (tiempo de modificación) se actualice por rsync . Puede comprobarlo cambiando el rsync que está utilizando:

rsync -rlpgoDv --dry-run --size-only [path 1] [path 2] --dry-run --size-only

Nótese que hay dos (2) cambios aquí; uno para eliminar el (implícito) -t opción, la otra para colocar todo opciones antes de las ubicaciones de origen y destino para que se correspondan con la sintaxis del comando en SYNOPSIS en man rsync . Además, me parece que recuerdo vagamente leer en alguna parte que la colocación de las opciones en rsync creado problemas.

Para reiterar algunos de los comentarios:

  • Ver la mesa en la parte inferior de la receta de GitHub para ayudar a descifrar el -i de salida.

  • La receta también contiene un procedimiento & script que puede considerar usar para verificar que está obteniendo exactamente lo que quiere; el get-stats.sh script - o simplemente utilizando el stat de forma selectiva - le permitirá verificar las marcas de tiempo.

  • Si utiliza la versión 2.6.9 de rsync probablemente deberías invertir algo de tiempo en actualizar a una versión actual. Recomiendo MacPorts para esto. Si tienes alguna pregunta detallada sobre cómo hacerlo, probablemente sea mejor que la manejes en una nueva pregunta.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X