Jetons un coup d'œil au fonctionnement de rsync et comprenons mieux les lignes de résultat cryptiques:
1 - Un énorme avantage de rsync est qu'après une interruption, la prochaine fois, il continue en douceur.
Le prochain appel rsync ne transférera pas à nouveau les fichiers, qu'il avait déjà transférés, s'ils n'ont pas été modifiés entre-temps. Mais il recommencera à vérifier tous les fichiers depuis le début pour le savoir, car il ne sait pas qu'il a été interrompu.
2 - Chaque caractère est un code qui peut être traduit si vous lisez la section pour -i, --itemize-changes
enman rsync
Décodage de votre exemple de fichier journal à partir de la question:
> 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
La partie pertinente de la page de manuel rsync:
-i, --itemize-changes
Demande une simple liste détaillée des modifications apportées à chaque fichier, y compris les modifications d'attributs. C'est exactement la même chose que de spécifier --out-format = '% i% n% L'. Si vous répétez l'option, les fichiers inchangés seront également affichés, mais seulement si le rsync de réception est au moins la version 2.6.7 (vous pouvez utiliser -vv avec les anciennes versions de rsync, mais cela active également la sortie d'autres messages verbeux- sages).
L'échappement «% i» a une sortie cryptique de 11 lettres. Le format général est comme la chaîne YXcstpoguax, où Y est remplacé par le type de mise à jour en cours, X est remplacé par le type de fichier, et les autres lettres représentent des attributs qui peuvent être générés si elles sont modifiées.
Les types de mise à jour qui remplacent le Y sont les suivants:
- A
<
signifie qu'un fichier est en cours de transfert vers l'hôte distant (envoyé).
- A
>
signifie qu'un fichier est en cours de transfert vers l'hôte local (reçu).
- A
c
signifie qu'une modification / création locale est en cours pour l'élément (comme la création d'un répertoire ou la modification d'un lien symbolique, etc.).
- A
h
signifie que l'élément est un lien physique vers un autre élément (nécessite --hard-links).
- A
.
signifie que l'élément n'est pas mis à jour (bien qu'il puisse avoir des attributs en cours de modification).
- A
*
signifie que le reste de la zone de sortie détaillée contient un message (par exemple "suppression").
Les types de fichiers qui remplacent le X sont: f
pour un fichier, un d
pour un répertoire, un L
pour un lien symbolique, un D
pour un périphérique et un S
pour un fichier spécial (par exemple, les sockets et fifos nommés).
Les autres lettres de la chaîne ci-dessus sont les lettres réelles qui seront générées si l'attribut associé pour l'élément est en cours de mise à jour ou un "." pour aucun changement. Trois exceptions à cela sont: (1) un élément nouvellement créé remplace chaque lettre par un "+", (2) un élément identique remplace les points par des espaces, et (3) un attribut inconnu remplace chaque lettre par un "?" (cela peut arriver lorsque vous parlez à un ancien rsync).
L'attribut associé à chaque lettre est le suivant:
- A
c
signifie soit qu'un fichier normal a une somme de contrôle différente (nécessite --checksum) soit qu'un lien symbolique, un périphérique ou un fichier spécial a une valeur modifiée. Notez que si vous envoyez des fichiers à une rsync antérieure à la version 3.0.1, cet indicateur de modification ne sera présent que pour les fichiers normaux dont la somme de contrôle diffère.
- Un
s
signifie que la taille d'un fichier normal est différente et sera mise à jour par le transfert de fichier.
- Un
t
signifie que l'heure de modification est différente et est mise à jour à la valeur de l'expéditeur (nécessite --times). Une valeur alternative de T signifie que l'heure de modification sera définie sur l'heure de transfert, ce qui se produit lorsqu'un fichier / lien symbolique / périphérique est mis à jour sans --times et lorsqu'un lien symbolique est modifié et que le récepteur ne peut pas définir son heure. (Remarque: lorsque vous utilisez un client rsync 3.0.0, vous pouvez voir l'indicateur s combiné avec t au lieu de l'indicateur T approprié pour cet échec de mise à l'heure.)
- Un
p
signifie que les autorisations sont différentes et sont mises à jour à la valeur de l'expéditeur (nécessite --perms).
- Un
o
signifie que le propriétaire est différent et qu'il est mis à jour à la valeur de l'expéditeur (nécessite les privilèges --owner et super-utilisateur).
- Un
g
signifie que le groupe est différent et est mis à jour à la valeur de l'expéditeur (nécessite --group et l'autorité pour définir le groupe).
- L'
u
emplacement est réservé pour une utilisation future.
- Les
a
moyens que les informations ACL ont changé.
- Les
x
moyens que les informations d'attributs étendus modifié.
Une autre sortie est possible: lors de la suppression de fichiers, le "% i" affichera la chaîne "* deleting" pour chaque élément qui est supprimé (en supposant que vous parlez à une rsync suffisamment récente pour qu'elle enregistre les suppressions au lieu de les afficher sous forme de un message détaillé).
Il y a quelque temps, j'avais besoin de comprendre la
rsync
sortie d'un script que j'écrivais. Pendant le processus d'écriture de ce script, j'ai cherché sur Google et je suis arrivé à ce que @mit avait écrit ci-dessus . J'ai utilisé ces informations, ainsi que la documentation d'autres sources, pour créer mon propre amorce sur les indicateurs de bits et comment obtenirrsync
des indicateurs de bits de sortie pour toutes les actions (il ne le fait pas par défaut).Je publie ces informations ici dans l'espoir que cela aide d'autres personnes qui (comme moi) tombent sur cette page via la recherche et ont besoin d'une meilleure explication
rsync
.Avec la combinaison de l'
--itemize-changes
indicateur et de l'-vvv
indicateur,rsync
nous donne une sortie détaillée de toutes les modifications du système de fichiers qui ont été identifiées dans le répertoire source par rapport au répertoire cible. Les indicateurs binaires produits parrsync
peuvent ensuite être décodés pour déterminer ce qui a changé. Pour décoder la signification de chaque bit, utilisez le tableau suivant.Explication de chaque position de bit et valeur dans
rsync
la sortie de:Quelques exemples de sortie de rsync pour divers scénarios:
Capture de
rsync
la sortie (axée sur les indicateurs de bits):Dans mon expérimentation, l'
--itemize-changes
indicateur et l'-vvv
indicateur sont nécessaires pour obtenirrsync
une entrée pour toutes les modifications du système de fichiers. Sans l'-vvv
indicateur triple verbose ( ), je ne voyais pas les changements de répertoire, de lien et de périphérique répertoriés. Il vaut la peine d'expérimenter votre version de rsync pour vous assurer qu'elle observe et note tout ce que vous attendiez.Une utilisation pratique de cette technique consiste à ajouter l'
--dry-run
indicateur à la commande et à collecter la liste de modifications, telle que déterminée par rsync, dans une variable (sans apporter de modifications) afin que vous puissiez effectuer vous-même certains traitements sur la liste. Quelque chose comme ce qui suit capturerait la sortie dans une variable:Dans l'exemple ci-dessus, la sortie (stdout) de
rsync
est redirigée versgrep
(via stdin) afin que nous puissions isoler uniquement les lignes qui contiennent des indicateurs de bits.Traitement de la sortie capturée:
Le contenu de la variable peut ensuite être consigné pour une utilisation ultérieure ou immédiatement répété pour les éléments d'intérêt. J'utilise cette tactique exacte dans le script que j'ai écrit pendant mes recherches
rsync
. Vous pouvez consulter le script ( https://github.com/jmmitchell/movestough ) pour des exemples de post-traitement de la sortie capturée pour isoler de nouveaux fichiers, des fichiers en double (même nom, même contenu), des collisions de fichiers (même nom, différents contents), ainsi que les changements dans les structures des sous-répertoires.la source
1) Wodin, ce n'est pas tout à fait vrai. Si vous utilisez la balise --partial ou -P (identique à --partial --progress), rsync reprend les transferts interrompus.
2) Exactement, c'est la sortie commune pour la balise --itemize-changes.
la source
1.) Il "redémarrera la synchronisation", mais il ne transférera pas les fichiers qui sont de la même taille et horodatage, etc. et les sautera. Vous devez dire à rsync de conserver les horodatages, etc. (par exemple en utilisant
rsync -a ...
)Pendant que rsync transfère un fichier, il l'appellera quelque chose comme
.filename.XYZABC
au lieu defilename
. Ensuite, quand il aura fini de transférer ce fichier, il le renommera. Donc, si vous tuez rsync pendant qu'il transfère un gros fichier, vous devrez utiliser l'option --partial pour continuer le transfert au lieu de recommencer à zéro.2.) Je ne sais pas ce que c'est. Pouvez-vous coller quelques exemples?
EDIT: Comme par http://ubuntuforums.org/showthread.php?t=1342171 ces codes sont définis dans la page de manuel rsync dans la section pour l'
-i, --itemize-changes
option.Partie fixe si ma réponse basée sur celle de Joao
la source