web-dev-qa-db-fra.com

rsync ignore le propriétaire, le groupe, l'heure et les perms

Je veux savoir comment utiliser rsync pour la synchronisation avec les dossiers récursifs mais j'ai seulement besoin de mettre à jour les nouveaux fichiers ou les fichiers mis à jour (seulement le contenu pas le propriétaire, le groupe ou l'horodatage) et je veux supprimer les fichiers qui n'existent pas dans la source .

75
alsanal

Je pense que vous pouvez utiliser le -no- options vers rsync vers ET NON copiez la propriété ou les autorisations des fichiers que vous synchronisez.

Extrait de la page de manuel 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).

Propriété et autorisations

En parcourant la page de manuel, je pense que vous voudriez utiliser quelque chose comme ceci:

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

Pour supprimer des fichiers qui n'existent pas, vous pouvez utiliser le --delete commutateur:

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

Horodatages

En ce qui concerne l'horodatage, je ne vois pas de moyen de le conserver sans modifier la façon dont vous feriez la comparaison des fichiers SOURCE vs DEST. Vous voudrez peut-être dire à rsync d'ignorer les horodatages à l'aide de ce commutateur:

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

Mise à jour

Pour les horodatages, --no-times pourrait faire ce que vous cherchez.

104
slm

Je pense qu'il est plus facile d'éviter l'option - a

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

et définissez uniquement les options souhaitées.

Si vous aimez toutes les options mais pas les modifications de l'utilisateur - o, group - g, time - t and permissions - p afin que vous puissiez soustraire ces quatre options de l'équivalent d'archive.

$ -rlD

Pour supprimer les fichiers à destination, veuillez utiliser l'option - supprimer.

À votre question: Mais je pense que tous les fichiers seront vérifiés - rsync ne peut pas transférer/vérifier uniquement les fichiers qui n'ont changé que par leur contenu.

18
UsersUser

Je pense que ce que vous cherchez est l'option

rsync -r --size-only

à partir de la page de manuel:

--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 vous voulez vraiment supprimer les fichiers manquants dans le répertoire source, utilisez --delete

8
rubo77

Vous pouvez forcer rsync à ignorer les vérifications en fonction de l'heure et de la taille du mod de fichier et utiliser une approche basée sur chksum avec le commutateur "-c".

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

Cela signifie qu'il doit comparer l'intégralité du fichier en morceaux (et transférer les métadonnées pertinentes entre la source et la destination pour que cela se produise), que l'heure et la taille du fichier correspondent ou non, mais ne transfèrera que les morceaux qui diffèrent. entre la source et la destination.

L'utilisation de ce commutateur en conjonction avec les autres commutateurs suggérés par d'autres devrait limiter ce qui est copié (ne copiant que ce qui a changé), et a l'avantage de faire un contrôle de cohérence entre la source et la destination, MAIS cela prend plus de temps en fonction de la vitesse de votre lien comme il doit additionner les morceaux de fichier des deux côtés et comparer).

6
Anthony DFH