rsync ignora proprietario, gruppo, ora e permanenti


67

Voglio sapere come utilizzare rsync per la sincronizzazione ricorsiva con le cartelle, ma ho solo bisogno di aggiornare i nuovi file o i file aggiornati (solo il contenuto non il proprietario, il gruppo o il timestamp) e voglio eliminare i file che non esistono nell'origine .

Risposte:


94

Penso che si possa utilizzare le -no-opzioni per rsyncper non copiare la proprietà o permessi dei file che stai sync'ing.

Estratto dalla pagina man di 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).

Proprietà e autorizzazioni

Guardando attraverso la pagina man credo che vorresti usare qualcosa del genere:

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

Per eliminare i file che non esistono è possibile utilizzare l' --deleteopzione:

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

timestamps

Per quanto riguarda il timestamp, non vedo un modo per mantenerlo senza alterare il modo in cui faresti il ​​confronto tra i file SOURCE e DEST. Potresti voler dire rsyncdi ignorare i timestamp usando questa opzione:

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

Aggiornare

Per i timestamp, --no-timespotresti fare quello che stai cercando.


quando uso --no-times sto ancora vedendo molti file (con modifiche dettagliate) contrassegnati con ciò >f..T...che suggerisce che i flag di file e il tempo di modifica sono impostati sulla destinazione, che è ciò che sto cercando di evitare.
Michael,

17

Penso che sia più facile evitare l' opzione -a

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

e imposta solo le opzioni desiderate.

Se ti piacciono tutte le opzioni ma non le modifiche dell'utente -o , group -g , time -t e autorizzazioni -p , puoi sottrarre queste quattro opzioni dall'equivalente dell'archivio.

$ -rlD

Per eliminare i file sulla destinazione, utilizzare l'opzione - Elimina .

Alla tua domanda: ma penso che tutti i file verranno controllati - rsync non può trasferire / controllare solo i file che sono stati modificati solo dal contenuto.


-lè per link, -Ddispositivi (trattati come --specials), penso che -rda solo sia sufficiente se parliamo di contenuto.
sdkks,

7

Penso che quello che stai cercando sia l'opzione

rsync -r --size-only

dalla pagina man:

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

Se vuoi veramente cancellare i file mancanti nella directory sorgente usa --delete


4

È possibile forzare rsync a ignorare i controlli in base al tempo e alle dimensioni del file mod e utilizzare un approccio basato su chksum con l'opzione "-c".

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

Ciò significa che deve confrontare l'intero file in blocchi (e trasferire avanti e indietro i metadati pertinenti tra origine e destinazione affinché ciò accada), indipendentemente dal fatto che il tempo e le dimensioni del file corrispondano o meno, ma trasferirà solo i blocchi che differiscono tra la fonte e la destinazione.

L'uso di questo switch insieme agli altri switch suggeriti da altri dovrebbe limitare ciò che viene copiato (solo copiando ciò che è cambiato) e ha il vantaggio di fare un controllo di coerenza tra sorgente e destinazione, MA impiega più tempo a seconda della velocità del tuo collegamento come deve chksum i blocchi di file su entrambi i lati e confrontare).


Dubito che questo fosse ciò che OP aveva in mente. Il problema non sembra essere correlato al modo in cui i file sono stati selezionati, ma gli attributi sono stati copiati e la risposta scelta (anche la più votata) lo copre già.
Julie Pelletier,

-3

Sotto il comando funzionerebbe perfettamente, l'ho testato per le mie esigenze, ci vorrà solo la modifica del contenuto.

rsync -acvzh source/ destination/
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.