1 votes

rsync listing répertoire sans changement

J'ai essayé de comprendre le comportement de rsync, qui liste toujours les répertoires avec des horodatages différents et des tailles identiques, malgré la fourniture d'un fichier de type --size-only drapeau.

# lists some directory without listing any changed files
> rsync -av [path 1] [path 2] --dry-run --size-only
> building file list ... done
> folder1/folder1a/
> folder1/folder1b/

# checks reasons with -i
# ...
> .d..t....folder1/folder1a/
> .d..t....folder1/folder1b/

Comme vous pouvez le voir, --itemize-change montre que la seule différence entre les dossiers source et destination est l'horodatage. Mais il est toujours listé dans mon exécution normale de rsync malgré la fourniture de --size-only . Y a-t-il un moyen de corriger cela ? Il semble qu'il modifie toujours le dossier de destination si je l'exécute, ce qui entraîne un rechargement du dossier dans mes services de sauvegarde en nuage. Merci !

EDIT : La version de rsync est 2.6.9. La source est un dossier avec des sous-dossiers à l'intérieur, et à l'intérieur duquel se trouvent des fichiers aléatoires. La destination est mon dossier OneDrive. Il devrait être identique à la source, mais après avoir exécuté rsync pour transférer les dossiers, il semble que OneDrive touche les dossiers et fait que le futur rsync les voit comme différents (et rien d'autre de manuel ne se passe quand rsync est exécuté). Cela ne me dérange pas, mais je ne veux pas que rsync les mette à jour à l'avenir. C'est pourquoi j'ajoute l'option --size-only pour ignorer les différences d'horodatage. Ce que j'essaie de comprendre, c'est pourquoi ces répertoires sont toujours listés, même si le changement signalé par --itemize-change est seulement une différence d'horodatage ( .d..t.... ) ? Je ne veux pas qu'ils soient retransférés à chaque fois que je lance rsync simplement parce qu'ils ont des horodatages différents.

EDIT 2 : Au début, je les ai téléchargés sur OneDrive (pas avec rsync), puis j'ai lancé rsync avec --size-only sur le dossier plus tard. Par conséquent, le temps de modération des fichiers de destination n'est jamais modifié. Alors que --size-only ne tient pas compte du fichier lui-même, le dossier est toujours considéré comme "différent". Je pense donc que même si la seule différence sur les dossiers eux-mêmes est l'horodatage ( .d..t.... ), il met quand même à jour le dossier car les fichiers qu'il contient sont perçus comme différents (même avec la fonction --size-only ). Une fois que j'ai rsynchronisé tout sans --size-only une fois, le problème a disparu puisque le temps de modération des fichiers à l'intérieur a changé.

Mais ce comportement n'est pas souhaitable, puisque le dossier et les fichiers eux-mêmes sont identiques à l'exception des horodatages. --size-only devrait ignorer complètement le dossier. J'ai seulement l'intention d'utiliser rsync pour remplir les fichiers manquants après le téléchargement sur OneDrive (web), et non pas de les rsynchroniser dès le départ (car parfois la synchronisation des changements du disque local avec OneDrive est très très lente par rapport au téléchargement). Existe-t-il un moyen de contourner ce problème ? Comment puis-je empêcher rsync de mettre à jour des répertoires dont le contenu est identique en termes de taille ?

1voto

Seamus Points 3171

Le site rsync que vous utilisez : rsync -av ...

Si vous vous référez à man rsync Notez ce qui suit :

-a, --archive mode archive ; identique à -rlptgoD (pas de -H)

En d'autres termes : -a implique les options : -rlptgoD

Notez que l'option -t est défini dans man rsync comme suit :

-t, --times préserver le temps

Maintenant, pour le --size-only option, man rsync nous dit :

-- taille unique
Normalement, rsync ne transfère pas les fichiers qui ont déjà la même taille et le même horodatage de modification. Avec l'option --size-only, les fichiers ne seront pas transférés s'ils ont la même taille, sans tenir compte de l'horodatage. Ceci est utile lorsque vous commencez à utiliser rsync après avoir utilisé un autre système de miroir qui peut ne pas préserver exactement les horodatages.

Je n'ai pas eu le temps de le vérifier (je vous laisse le faire si cela ne vous dérange pas), mais je pense que cela signifie que, bien qu'aucun fichier ne soit transféré (il s'agit d'un dossier) à cause de --size-only le -t (implicite avec -a ) entraîne la mise à jour de l'horodatage (temps de modification) du dossier par rsync . Vous pouvez vérifier cela en changeant le rsync que vous utilisez pour :

rsync -rlpgoDv --dry-run --size-only [path 1] [path 2] --dry-run --size-only

Notez qu'il y a deux (2) changements ici ; un pour éliminer le (implicite) -t l'autre de placer tous avant les emplacements de la Source et de la Destination pour correspondre à la syntaxe de la commande sous SYNOPSIS sur man rsync . De plus, je semble se souvenir vaguement J'ai lu quelque part que le mauvais placement des options dans rsync a créé des problèmes.

Pour réitérer certains commentaires :

  • Voir la table au bas de la recette GitHub pour aider à décoder les -i sortie.

  • La recette contient également une procédure & script que vous pouvez envisager d'utiliser pour vérifier que vous obtenez exactement ce que vous voulez ; le get-stats.sh script - ou simplement en utilisant le stat de manière sélective - vous permettra de vérifier les horodatages.

  • Si vous utilisez la version 2.6.9 de l'application rsync vous devriez probablement investir un peu de temps pour passer à une version plus récente. Je recommande MacPorts pour cela. Si vous avez des questions détaillées sur la façon de procéder, il est probablement préférable de les traiter dans une nouvelle question.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X