Comment rsyncier uniquement les nouveaux fichiers

144

J'essaie de configurer rsync pour synchroniser mon serveur Web principal sur le serveur distant en ajoutant le fichier généré à ce dernier.

Voici la commande que j'utilise:

rsync -avh --update -e "ssh -i /path/to/thishost-rsync-key" remoteuser@remotehost:/foo/bar /foo/bar

Mais il semble que le serveur Web transfère réellement tous les fichiers malgré l'indicateur '--update'. J'ai essayé différentes combinaisons de drapeaux (par exemple, en omettant '-a' et en utilisant '-uv' à la place) mais aucune n'a aidé. Je me demande donc comment modifier la commande rsync pour n’envoyer que les fichiers récemment ajoutés. Merci

Super mario
la source
2
Si vous souhaitez synchroniser des fichiers sur le serveur distant, cela ne devrait-il pas être la dernière? c'est à dire rsync /foo/bar remoteuser@remotehost:/foo/bar
ostrokak
Vous pourriez être intéressé par cette page Web . Aussi, soyez prudent avec le système de fichiers. Si le système de fichiers du serveur ne prend pas en charge toutes les -aoptions (propriétaire, groupe, perms, ...), cela devrait être la cause de notre problème.
ppr
2
Aucune des réponses ne résout le problème dans lequel les fichiers locaux n'ont pas été complètement copiés vers la destination distante et vous souhaitez uniquement rsynciser les fichiers les plus récents.
Axel Bregnsbo
Je viens de trouver l' -coption. Il ignore les fichiers existants en fonction d'une somme de contrôle, au lieu de l'heure ou de la taille de modification.
haheute

Réponses:

181

De man rsync:

--ignore-existing       skip updating files that exist on receiver

--updatefait quelque chose de légèrement différent, ce qui explique probablement pourquoi vous obtenez des résultats inattendus (voir man rsync):

Cela force rsync à ignorer tous les fichiers existant sur la destination et dont l'heure de modification est plus récente que celle du fichier source . (Si un fichier de destination existant a une heure de modification égale à celle du fichier source, il sera mis à jour si les tailles sont différentes.)

Chris Down
la source
1
Eh bien en fait, j'ai essayé la commande avec '--ignore-existant' au lieu de '--update'. Il a terminé rapidement mais ne met pas les nouveaux fichiers dans l'hôte distant. Des idées? Merci
supermario
13
Les pages de manuel sont nulles (c'est vrai je suis allé là-bas), par exemple, cela --ignore-existingsignifie- t-il que vous ne transférez pas de fichiers existant sur le récepteur ou ne transférez pas de fichiers si un fichier / dossier portant le même nom existe déjà sur le récepteur?
puk
7
--update n'Ignorer les fichiers lorsque les mtimes sont identiques ( ce qui est pas ce que le libellé implique). J'ai testé cela. Je crois que la formulation serait mieux comprise si elle disait "seuls les fichiers source plus récents que la destination seront copiés".
Octopus
4
@Octopus "seuls les fichiers source plus récents que la destination seront copiés" ... ou les fichiers source ayant la même heure de modification que leurs homologues de fichier de destination, mais de tailles différentes . Je pense que c'est un point important. (Chris a déjà couvert cela, merci)
Jonathan Komar
Donc vous avez besoin de --ignore-existant et -r (récursif). -v (verbose) est bien d'avoir aussi :-)
DutchUncle
40

Dans mon cas, j'ai eu des problèmes similaires, ayant tous les fichiers transférés au lieu des fichiers modifiés / nouveaux. J'ai résolu ce problème en utilisant des paramètres -t(au lieu de -a), et -P(équivalent à --partial --progress):

rsync -h -v -r -P -t -t source cible

Cela transfère uniquement les nouveaux fichiers et les fichiers déjà existants mais modifiés: en -afait trop, comme la synchronisation des identifiants de groupe et d'utilisateur, qui dans mon cas ne peut pas fonctionner, car j'ai plusieurs utilisateurs et groupes sur mes systèmes source et cible.

Les paramètres en détail:

  • -h: nombres lisibles par l'homme
  • -v: verbeux
  • -r: recurse dans les annuaires
  • -P: --partial(conserve les fichiers partiellement transférés) +
            --progress(affiche la progression pendant le transfert)
  • -t: conserver les temps de modification
t0r0X
la source
2
+1 pour "-a en fait trop" (en fait -rlptgoD, les autorisations ne sont pas flattées, les groupes et les propriétaires sont préservés - pas ma sauvegarde type sécurisée pour le jeu ...)
Frank Nocke
2

D'après mon expérience avec rsync, une copie de partition de 1 To est trop volumineuse pour être efficace. Cela prend rsync à jamais pour le traiter. Au lieu de cela, faites-le par sous-répertoires. Autrement dit, exécutez rsync pour chaque sous-répertoire principal. Cela va beaucoup plus vite s'il ne faut pas jongler avec des dizaines de milliers de fichiers.

Turgut Kalfaoglu
la source
1
Peut-être que vous avez manqué de mémoire et que votre système a commencé à permuter?
Marcel Burkhard
-2

Essayer

rsync -zvrt --update SOURCE DESTN
oméga
la source
8
Un peu plus d'explications à la commande ci-dessus seraient appréciées pour le PO.
Peschke
de la page de manuel `-u, --update ignorer les fichiers les plus récents sur le récepteur`
ShoeLace