Werfen wir einen Blick auf die Funktionsweise von rsync und verstehen die kryptischen Ergebniszeilen besser:
1 - Ein großer Vorteil von rsync ist, dass es nach einer Unterbrechung beim nächsten Mal reibungslos weitergeht.
Beim nächsten rsync-Aufruf werden die bereits übertragenen Dateien nicht erneut übertragen, wenn sie in der Zwischenzeit nicht geändert wurden. Es werden jedoch von Anfang an alle Dateien erneut überprüft, um dies herauszufinden, da nicht bekannt ist, dass sie unterbrochen wurden.
2 - Jedes Zeichen ist ein Code, der übersetzt werden kann, wenn Sie den Abschnitt für -i, --itemize-changes
in lesenman rsync
Dekodieren Sie Ihre Beispielprotokolldatei aus der Frage:
> f.st ......
> - the item is received
f - it is a regular file
s - the file size is different
t - the time stamp is different
.d..t ......
. - the item is not being updated (though it might have attributes
that are being modified)
d - it is a directory
t - the time stamp is different
> f +++++++++
> - the item is received
f - a regular file
+++++++++ - this is a newly created item
Der relevante Teil der rsync-Manpage:
-i, --itemize-Änderungen
Fordert eine einfache detaillierte Liste der Änderungen an, die an jeder Datei vorgenommen werden, einschließlich Attributänderungen. Dies entspricht genau der Angabe von --out-format = '% i% n% L'. Wenn Sie die Option wiederholen, werden auch unveränderte Dateien ausgegeben, jedoch nur, wenn der empfangende Rsync mindestens Version 2.6.7 ist (Sie können -vv mit älteren Versionen von Rsync verwenden, dies aktiviert jedoch auch die Ausgabe anderer ausführlicher Nachrichten. Weise).
Das Escape "% i" hat eine kryptische Ausgabe, die 11 Buchstaben lang ist. Das allgemeine Format ähnelt der Zeichenfolge YXcstpoguax, wobei Y durch die Art der Aktualisierung ersetzt wird, X durch den Dateityp ersetzt wird und die anderen Buchstaben Attribute darstellen, die ausgegeben werden können, wenn sie geändert werden.
Die Aktualisierungstypen, die das Y ersetzen, sind wie folgt:
- A
<
bedeutet, dass eine Datei an den Remote-Host übertragen (gesendet) wird.
- EIN
>
bedeutet, dass eine Datei auf den lokalen Host übertragen wird (empfangen).
- A
c
bedeutet, dass für das Element eine lokale Änderung / Erstellung erfolgt (z. B. das Erstellen eines Verzeichnisses oder das Ändern eines Symlinks usw.).
- EIN
h
bedeutet, dass der Artikel ein fester Link zu einem anderen Artikel ist (erfordert --hard-links).
- EIN
.
bedeutet, dass das Element nicht aktualisiert wird (obwohl es möglicherweise Attribute enthält, die geändert werden).
- A
*
bedeutet, dass der Rest des Einzelausgabebereichs eine Nachricht enthält (z. B. "Löschen").
Die Dateitypen, die das X ersetzen, sind: f
für eine Datei, a d
für ein Verzeichnis, a L
für einen Symlink, a D
für ein Gerät und aS
für eine spezielle Datei (z. B. benannte Sockets und Fifos).
Die anderen Buchstaben in der obigen Zeichenfolge sind die tatsächlichen Buchstaben, die ausgegeben werden, wenn das zugehörige Attribut für das Element aktualisiert wird, oder ein "." für keine Änderung. Drei Ausnahmen sind: (1) Ein neu erstelltes Element ersetzt jeden Buchstaben durch ein "+", (2) ein identisches Element ersetzt die Punkte durch Leerzeichen und (3) ein unbekanntes Attribut ersetzt jeden Buchstaben durch ein "?" (Dies kann passieren, wenn Sie mit einem älteren Rsync sprechen).
Das Attribut, das jedem Buchstaben zugeordnet ist, lautet wie folgt:
- EIN
c
bedeutet entweder, dass eine reguläre Datei eine andere Prüfsumme hat (erfordert --checksum) oder dass ein Symlink, ein Gerät oder eine spezielle Datei einen geänderten Wert hat. Beachten Sie, dass dieses Änderungsflag nur für reguläre Dateien mit unterschiedlichen Prüfsummen vorhanden ist, wenn Sie Dateien vor 3.0.1 an einen rsync senden.
- A
s
bedeutet, dass die Größe einer regulären Datei unterschiedlich ist und durch die Dateiübertragung aktualisiert wird.
- A
t
bedeutet, dass die Änderungszeit unterschiedlich ist und auf den Wert des Absenders aktualisiert wird (erfordert --times). Ein alternativer Wert von T bedeutet, dass die Änderungszeit auf die Übertragungszeit eingestellt wird. Dies geschieht, wenn eine Datei / ein Symlink / ein Gerät ohne --times aktualisiert wird und wenn ein Symlink geändert wird und der Empfänger seine Zeit nicht einstellen kann. (Hinweis: Wenn Sie einen rsync 3.0.0-Client verwenden, wird möglicherweise das s-Flag mit t anstelle des richtigen T-Flags für diesen Zeiteinstellungsfehler kombiniert.)
- A
p
bedeutet, dass die Berechtigungen unterschiedlich sind und auf den Wert des Absenders aktualisiert werden (erfordert --perms).
- Ein
o
bedeutet, dass der Eigentümer anders ist und auf den Wert des Absenders aktualisiert wird (erfordert - Eigentümer- und Superuser-Berechtigungen).
- A
g
bedeutet, dass die Gruppe unterschiedlich ist und auf den Wert des Absenders aktualisiert wird (erfordert --group und die Berechtigung zum Festlegen der Gruppe).
- Der
u
Steckplatz ist für die zukünftige Verwendung reserviert.
- Die
a
bedeutet , dass die ACL - Informationen geändert.
- Dies
x
bedeutet, dass sich die erweiterten Attributinformationen geändert haben.
Eine weitere Ausgabe ist möglich: Beim Löschen von Dateien gibt "% i" für jedes Element, das entfernt wird, die Zeichenfolge "* deleting" aus (vorausgesetzt, Sie sprechen mit einem ausreichend aktuellen rsync, um Löschvorgänge zu protokollieren, anstatt sie als auszugeben eine ausführliche Nachricht).
Vor einiger Zeit musste ich die
rsync
Ausgabe für ein Skript verstehen, das ich schrieb. Während des Schreibens dieses Skripts googelte ich herum und kam zu dem, was @mit oben geschrieben hatte . Ich habe diese Informationen sowie die Dokumentation aus anderen Quellen verwendet, um meinen eigenen Primer für die Bit-Flags zu erstellen und umrsync
zu erfahren, wie Bit-Flags für alle Aktionen ausgegeben werden (dies geschieht standardmäßig nicht).Ich poste diese Informationen hier in der Hoffnung, dass sie anderen helfen, die (wie ich) über die Suche auf diese Seite stoßen und eine bessere Erklärung benötigen
rsync
.Mit der Kombination aus der
--itemize-changes
Flagge und die-vvv
Flagge,rsync
gibt uns detaillierte Ausgabe aller Dateisystemänderungen , die im Quellverzeichnis identifiziert wurden , als in das Zielverzeichnis verglichen. Die von erzeugten Bit-Flagsrsync
können dann decodiert werden, um festzustellen, was sich geändert hat. Verwenden Sie die folgende Tabelle, um die Bedeutung jedes Bits zu dekodieren.Erklärung jeder Bitposition und jedes Wertes in
rsync
der Ausgabe:Einige Beispielausgaben von rsync für verschiedene Szenarien:
Erfassen
rsync
der Ausgabe (konzentriert auf die Bit-Flags):In meinen Experimenten werden sowohl das
--itemize-changes
Flag als auch das-vvv
Flag benötigt, umrsync
einen Eintrag für alle Dateisystemänderungen auszugeben . Ohne die dreifache Ausführlichkeit (-vvv
) -Flag wurden keine Verzeichnis-, Link- und Geräteänderungen aufgelistet. Es lohnt sich, mit Ihrer Version von rsync zu experimentieren, um sicherzustellen, dass alles, was Sie erwartet haben, beobachtet und notiert wird.Eine praktische Anwendung dieser Technik besteht darin, das
--dry-run
Flag zum Befehl hinzuzufügen und die von rsync festgelegte Änderungsliste in einer Variablen zu sammeln (ohne Änderungen vorzunehmen), damit Sie die Liste selbst bearbeiten können. So etwas wie das Folgende würde die Ausgabe in einer Variablen erfassen:Im obigen Beispiel wird die Ausgabe von (stdout) von (über stdin)
rsync
umgeleitet,grep
sodass nur die Zeilen isoliert werden können, die Bitflags enthalten.Verarbeitung der erfassten Ausgabe:
Der Inhalt der Variablen kann dann zur späteren Verwendung protokolliert oder sofort für interessierende Elemente wiederholt werden. Ich verwende genau diese Taktik in dem Skript, über das ich mehr recherchiert habe
rsync
. Im Skript ( https://github.com/jmmitchell/movestough ) finden Sie Beispiele für die Nachbearbeitung der erfassten Ausgabe, um neue Dateien, doppelte Dateien (gleicher Name, gleicher Inhalt) und Dateikollisionen (gleicher Name, unterschiedlich) zu isolieren Inhalt) sowie die Änderungen in den Unterverzeichnisstrukturen.quelle
1) Wodin, das stimmt nicht ganz. Bei Verwendung des Tags --partial oder -P (wie --partial --progress) setzt rsync unterbrochene Übertragungen fort.
2) Genau das ist die übliche Ausgabe für das Tag --itemize-change.
quelle
1.) Es wird "die Synchronisierung neu starten", aber es werden keine Dateien mit derselben Größe und demselben Zeitstempel usw. übertragen. Zunächst wird eine Liste der zu übertragenden Dateien erstellt, und in dieser Phase wird festgestellt, dass bereits einige Dateien übertragen wurden und wird sie überspringen. Sie sollten rsync anweisen, die Zeitstempel usw. beizubehalten (z. B. using
rsync -a ...
).Während rsync eine Datei überträgt, nennt es sie so etwas wie
.filename.XYZABC
stattfilename
. Wenn die Übertragung dieser Datei abgeschlossen ist, wird sie umbenannt. Wenn Sie also rsync beenden, während eine große Datei übertragen wird, müssen Sie die Option --partial verwenden, um die Übertragung fortzusetzen, anstatt von vorne zu beginnen.2.) Ich weiß nicht was das ist. Können Sie einige Beispiele einfügen?
BEARBEITEN: Gemäß http://ubuntuforums.org/showthread.php?t=1342171 werden diese Codes in der Manpage rsync im Abschnitt für die
-i, --itemize-changes
Option definiert.Teil behoben, wenn meine Antwort auf Joaos basiert
quelle