rsync ignoruje właściciela, grupę, czas i perms

67

Chcę wiedzieć, jak używać rsync do synchronizacji z folderami rekurencyjnymi, ale muszę tylko zaktualizować nowe pliki lub zaktualizowane pliki (tylko zawartość nie jest właścicielem, grupą ani znacznikiem czasu) i chcę usunąć pliki, które nie istnieją w źródle .

Alsanal
źródło

Odpowiedzi:

93

Myślę, że można korzystać z -no-opcji rsync, aby nie kopiować własności lub uprawnień plików synchronizując jesteś.

Fragment strony podręcznika 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).

Własność i uprawnienia

Przeglądając stronę podręcznika, myślę, że chciałbyś użyć czegoś takiego:

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

Aby usunąć pliki, które nie istnieją, możesz użyć --deleteprzełącznika:

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

Znaczniki czasu

Jeśli chodzi o znacznik czasu, nie widzę sposobu, aby to zachować bez zmiany sposobu porównania plików SOURCE z plikami DEST. Możesz chcieć rsynczignorować znaczniki czasu za pomocą tego przełącznika:

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

Aktualizacja

W przypadku znaczników czasu --no-timesmożesz zrobić to, czego szukasz.

slm
źródło
kiedy używam - razy, wciąż widzę wiele plików (ze szczegółowymi zmianami) oznaczonych za pomocą, >f..T...co sugeruje, że w miejscu docelowym ustawiane są flagi plików i czas modyfikacji, co staram się unikać.
Michael
17

Myślę, że łatwiej jest uniknąć opcji -a

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

i ustaw tylko te opcje, które chcesz.

Jeśli podoba Ci się wszystkie opcje, ale nie modyfikacje użytkownika -o , grupa -g , czas -t i uprawnienia -p , możesz odjąć te cztery opcje od ekwiwalentu archiwum.

$ -rlD

Aby usunąć pliki na miejscu, użyj opcji - usuń .

Na twoje pytanie: Myślę jednak, że wszystkie pliki zostaną sprawdzone - rsync nie może przesyłać / sprawdzać tylko plików, które zmieniły się tylko pod względem zawartości.

UsersUser
źródło
-ldotyczy linków, -Durządzeń (traktowanych tak samo jak --specials), myślę, że -rsam wystarczy, jeśli mówimy o treści.
sdkks,
7

Myślę, że to, czego szukasz, jest opcją

rsync -r --size-only

ze strony podręcznika:

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

Jeśli naprawdę chcesz usunąć pliki brakujące w źródłowym katalogu, użyj --delete

rubo77
źródło
4

Możesz zmusić rsync do ignorowania kontroli w oparciu o czas i rozmiar modu pliku oraz zastosować podejście oparte na chksum z przełącznikiem „-c”.

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

Oznacza to, że musi porównywać cały plik w porcjach (i przesyłać odpowiednie metadane w obie strony między źródłem a miejscem docelowym, aby tak się stało) bez względu na to, czy czas i rozmiar pliku są zgodne, ale przenosi tylko te części, które różnią się między źródłem a miejscem docelowym.

Używanie tego przełącznika w połączeniu z innymi przełącznikami sugerowanymi przez innych powinno ograniczyć to, co zostało skopiowane (tylko kopiowanie tego, co uległo zmianie) i ma zaletę polegającą na sprawdzeniu spójności między źródłem a miejscem docelowym, ALE zajmuje to więcej czasu w zależności od szybkości łącza, ponieważ musi przekartkować fragmenty pliku po obu stronach i porównać).

Anthony DFH
źródło
Wątpię, żeby o to chodziło OP. Problem nie wydawał się być związany ze sposobem wybierania plików, ale atrybuty zostały skopiowane, a wybrana (również najbardziej pozytywna) odpowiedź już to obejmuje.
Julie Pelletier,
-3

Poniższe polecenie działałoby idealnie, przetestowałem je na własne wymagania, zajmie to tylko zmianę treści.

rsync -acvzh source/ destination/
Charles J.
źródło