rsync ignora propietario, grupo, tiempo y permisos


67

Quiero saber cómo usar rsync para la sincronización recursiva de carpetas, pero solo necesito actualizar los archivos nuevos o los archivos actualizados (solo el contenido, no el propietario, el grupo o la marca de tiempo) y quiero eliminar los archivos que no existen en la fuente .

Respuestas:


94

Creo que se puede utilizar las -no-opciones para rsyncque NO copiar el propietario o los permisos de los archivos que está sincronizando.

Extracto de la página de manual de rsync

--no-OPTION
       You may turn off one or more implied options by prefixing the option 
       name with "no-".  Not all options may be pre‐fixed  with  a  "no-":  
       only options that are implied by other options (e.g. --no-D, 
       --no-perms) or have different defaults in various circumstances (e.g. 
       --no-whole-file, --no-blocking-io, --no-dirs).  You may specify 
       either the short or the long option name after the "no-" prefix (e.g. 
       --no-R is the same as --no-relative).

       For example: if you want to use -a (--archive) but don’t want -o 
       (--owner), instead of converting -a into -rlptgD, you could specify 
       -a --no-o (or -a --no-owner).

       The order of the options is important:  if you specify --no-r -a, the 
       -r option would end up being turned on,  the opposite  of  -a  
       --no-r.   Note  also  that the side-effects of the --files-from 
       option are NOT positional, as it affects the default state of several 
       options and slightly changes the meaning of -a (see the  --files-from
       option for more details).

Propiedad y permisos

Mirando a través de la página de manual, creo que te gustaría usar algo como esto:

$ rsync -avz --no-perms --no-owner --no-group ...

Para eliminar archivos que no existen, puede usar el --deleteinterruptor:

$ rsync -avz --no-perms --no-owner --no-group --delete ....

Marcas de tiempo

En cuanto a la marca de tiempo, no veo una manera de mantener esto sin alterar cómo haría la comparación de los archivos SOURCE vs. DEST. Es posible que desee indicar rsyncque ignore las marcas de tiempo utilizando este modificador:

-I, --ignore-times
       Normally  rsync will skip any files that are already the same size 
       and have the same modification timestamp.  This option turns off this 
       "quick check" behavior, causing all files to be updated.

Actualizar

Para las marcas de tiempo, --no-timespodría hacer lo que estás buscando.


cuando uso --no-times sigo viendo muchos archivos (con cambios detallados) marcados usando lo >f..T...que sugiere que se establezcan banderas de archivos y tiempo de modificación en el destino, que es lo que estoy tratando de evitar.
Michael

17

Creo que es más fácil evitar la opción -a

$ -a, --archive               archive mode; equals -rlptgoD (no -H,-A,-X)

y establece solo las opciones que quieras.

Si le gustan todas las opciones pero no las modificaciones de usuario -o , grupo -g , tiempo -t y permisos -p , puede restar estas cuatro opciones del archivo equivalente.

$ -rlD

Para eliminar los archivos en el destino, use la opción --delete .

A su pregunta: Pero creo que todos los archivos serán verificados: rsync no puede transferir / verificar solo los archivos que solo cambiaron por contenido.


-les para enlaces, -Ddispositivos (tratados igual que --specials), creo que -rsolo es suficiente si estamos hablando de contenido.
sdkks

7

Creo que lo que buscas es la opción

rsync -r --size-only

de la página del manual:

--size-only
   This  modifies  rsync’s  "quick  check"  algorithm  for finding files that need to be transferred,
   changing it from the default of transferring files  with  either  a  changed  size  or  a  changed
   last-modified  time  to  just  looking  for  files that have changed in size.  This is useful when
   starting to use rsync after using another mirroring  system  which  may  not  preserve  timestamps
   exactly.

Si realmente desea eliminar los archivos que faltan en el directorio de origen, use --delete


4

Puede forzar a rsync a ignorar las comprobaciones basadas en el tiempo y tamaño del mod de archivo y utilizar un enfoque basado en chksum con el modificador "-c".

-c, --checksum              skip based on checksum, not mod-time & size

Esto significa que necesita comparar todo el archivo en fragmentos (y transferir los metadatos relevantes entre el origen y el destino para que esto suceda) independientemente de si el tiempo del archivo y el tamaño coinciden o no, pero solo transferirá los fragmentos que difieren entre el origen y el destino.

El uso de este interruptor junto con los otros interruptores sugeridos por otros debería limitar lo que se copia (solo copiando lo que ha cambiado) y tiene la ventaja de hacer una verificación de consistencia entre el origen y el destino, PERO lleva más tiempo dependiendo de la velocidad de su enlace. tiene que agregar los fragmentos de archivo en ambos lados y comparar).


Dudo que eso sea lo que OP tenía en mente. El problema no parecía estar relacionado con la forma en que se seleccionaron los archivos, sino con los atributos copiados, y la respuesta elegida (la más votada también) ya cubre eso.
Julie Pelletier

-3

El siguiente comando funcionaría perfectamente, lo probé para mis propios requisitos, solo tomará el cambio de contenido.

rsync -acvzh source/ destination/
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.