web-dev-qa-db-fra.com

Comment rsync uniquement les nouveaux fichiers

J'essaie de configurer rsync pour synchroniser mon serveur Web principal avec le serveur distant en ajoutant un nouveau 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é. Comment puis-je modifier la commande rsync pour envoyer uniquement les fichiers nouvellement ajoutés?

164
supermario

De man rsync:

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

--update fait quelque chose de légèrement différent, c'est probablement pourquoi vous obtenez des résultats inattendus (voir man rsync):

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

210
Chris Down

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

rsync -h -v -r -P -t sourcecible

Cela transfère uniquement les nouveaux fichiers et les fichiers déjà existants mais modifiés: -a en fait trop, comme la synchronisation des ID utilisateur et groupe, qui dans mon cas ne peut pas fonctionner car j'ai différents 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 répertoires
  • -P: --partial (conserver les fichiers partiellement transférés) +
    --progress (afficher la progression pendant le transfert)
  • -t: conserver les temps de modification
43
t0r0X

D'après mon expérience avec rsync, une copie de partition de 1 To est trop volumineuse pour être efficace. Il faut toujours rsync 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 n'a pas à jongler avec des dizaines de milliers de fichiers.

2
turgut kalfaoglu