rsync ignoriert Besitzer, Gruppe, Zeit und Dauer

67

Ich möchte wissen, wie ich rsync für die Synchronisierung mit Ordnern rekursiv verwende, aber ich muss nur die neuen Dateien oder die aktualisierten Dateien aktualisieren (nur den Inhalt, nicht den Eigentümer, die Gruppe oder den Zeitstempel) und ich möchte die Dateien löschen, die nicht in der Quelle vorhanden sind .

alsanal
quelle

Antworten:

93

Ich denke, Sie können die -no-Optionen verwenden, rsyncum den Besitz oder die Berechtigungen der Dateien, die Sie synchronisieren , NICHT zu kopieren.

Auszug aus der rsync-Manpage

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

Eigentum & Berechtigungen

Wenn Sie die Manpage durchsehen, möchten Sie meines Erachtens Folgendes verwenden:

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

Um nicht vorhandene Dateien zu löschen, können Sie den --deleteSchalter verwenden:

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

Zeitstempel

Was den Zeitstempel betrifft, sehe ich keine Möglichkeit, dies beizubehalten, ohne zu ändern, wie Sie den Vergleich von SOURCE- und DEST-Dateien durchführen würden. Sie können festlegen rsync, dass Zeitstempel mit dieser Option ignoriert werden sollen:

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

Aktualisieren

--no-timesTun Sie bei Zeitstempeln möglicherweise, wonach Sie suchen.

slm
quelle
Wenn ich --no-times verwende, werden immer noch viele Dateien (mit detaillierten Änderungen) mit markiert, >f..T...was darauf hindeutet, dass Dateiflags und Änderungszeitpunkte für das Ziel festgelegt wurden. Dies ist das, was ich vermeiden möchte.
Michael
17

Ich denke, es ist einfacher, die Option -a zu vermeiden

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

und stellen Sie nur die gewünschten Optionen ein.

Wenn Sie alle Optionen, aber nicht die Änderungen von Benutzer -o , Gruppe -g , Zeit -t und Berechtigungen -p mögen , können Sie diese vier Optionen vom Archiväquivalent abziehen.

$ -rlD

Um die Dateien am Zielort zu löschen, verwenden Sie bitte die Option --delete .

Zu Ihrer Frage: Aber ich denke, alle Dateien werden überprüft - rsync kann nicht nur Dateien übertragen / überprüfen, die sich nur durch den Inhalt geändert haben.

UsersUser
quelle
-list für links, -Dgeräte (gleich behandelt wie --specials), ich denke -ralleine reicht wenn wir inhaltlich reden.
SDKKS
7

Ich denke, was Sie suchen, ist die Option

rsync -r --size-only

von der man Seite:

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

Wenn Sie wirklich Dateien löschen möchten, die im Quellverzeichnis fehlen, verwenden Sie --delete

rubo77
quelle
4

Sie können rsync zwingen, Überprüfungen zu ignorieren, die auf der Zeit und Größe der Dateimodifikation basieren, und mit der Option "-c" einen chksum-basierten Ansatz verwenden.

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

Dies bedeutet, dass die gesamte Datei in Chunks verglichen werden muss (und die relevanten Metadaten zwischen Quelle und Ziel hin und her übertragen werden müssen), unabhängig davon, ob Dateizeit und -größe übereinstimmen oder nicht, es werden jedoch nur die Chunks übertragen, die sich unterscheiden zwischen der Quelle und dem Ziel.

Die Verwendung dieses Schalters in Verbindung mit den anderen von anderen vorgeschlagenen Schaltern sollte das Kopieren einschränken (nur das Kopieren des Geänderten) und hat den Vorteil, dass eine Konsistenzprüfung zwischen Quelle und Ziel durchgeführt wird, ABER je nach Verbindungsgeschwindigkeit dauert dies länger es muss die Datei-Chunks auf beiden Seiten chksumieren und vergleichen).

Anthony DFH
quelle
Ich bezweifle, dass OP daran gedacht hat. Das Problem schien nicht damit zu zusammenhängen, wie die Dateien ausgewählt wurden, aber die Attribute, die kopiert wurden, und die gewählte (auch am besten bewertete) Antwort decken dies bereits ab.
Julie Pelletier
-3

Der folgende Befehl würde perfekt funktionieren, ich habe ihn für meine eigenen Anforderungen getestet, es wird nur die Änderung des Inhalts dauern.

rsync -acvzh source/ destination/
Charles J
quelle