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

67

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

alsanal
la source

Réponses:

94

Je pense que vous pouvez utiliser les -no-options rsyncpour NE PAS copier la propriété ou les autorisations des fichiers que vous sync'ing.

Extrait de la page de manuel 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 --deletecommutateur:

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

Horodatage

En ce qui concerne l'horodatage, je ne vois pas comment le conserver sans modifier la comparaison des fichiers SOURCE et DEST. Vous voudrez peut-être dire rsyncd'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-timesfaites ce que vous cherchez.

slm
la source
Lors de l'utilisation de --no-times, je vois toujours beaucoup de fichiers (avec des modifications détaillées) marqués à l'aide d'une >f..T...indication suggérant que les drapeaux de fichiers et l'heure de modification sont définis sur la destination, ce que j'essaie d'éviter.
Michael
17

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 , du groupe -g , de l'heure -t et des autorisations -p , vous pouvez soustraire ces quatre options de l'équivalent d'archive.

$ -rlD

Pour supprimer les fichiers sur la destination, utilisez l'option --delete .

A votre question: Mais je pense que tous les fichiers seront vérifiés - rsync ne peut pas transférer / vérifier uniquement les fichiers modifiés uniquement par leur contenu.

UtilisateursUtilisateur
la source
-lest pour les liens, les -Dappareils (traités comme --specials), je pense que -rseul est suffisant si nous parlons de contenu.
sdkks
7

Je pense que ce que vous recherchez, c'est l'option

rsync -r --size-only

depuis 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

rubo77
la source
4

Vous pouvez forcer rsync à ignorer les vérifications basées sur la durée et la taille du 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 le fichier entier en morceaux (et transférer les métadonnées pertinentes entre la source et la destination pour que cela se produise), que le temps et la taille du fichier correspondent ou non, mais transfère uniquement 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 le contenu copié (copier uniquement celui qui a changé) et présenter l’avantage de faire une vérification de la cohérence entre la source et la destination, MAIS cela prend plus de temps en fonction de la vitesse de votre lien, il doit chksum les morceaux de fichier des deux côtés et comparer).

Anthony DFH
la source
Je doute que ce soit ce que OP avait en tête. Le problème ne semblait pas être lié à la façon dont les fichiers avaient été sélectionnés, mais les attributs copiés et la réponse choisie (la plus votée aussi) couvraient déjà cela.
Julie Pelletier
-3

Au-dessous de la commande fonctionnerait parfaitement, je l'ai testé pour mon propre besoin, il ne faudra que le changement de contenu.

rsync -acvzh source/ destination/
Charles J
la source