web-dev-qa-db-fra.com

Réutiliser rsync - sortie sèche pour accélérer le transfert réel plus tard

Je fais habituellement rsync -n avant de faire un rsync réel. La chose est, comment pourrais-je automatiser la deuxième exécution pour réutiliser exactement la liste générée avec --dry-run?

Je veux dire, si je lance rsync -n puis j'obtiens une simulation de ce que rsync ferait, mon idée serait de prendre cette sortie, de la traiter puis de faire en quelque sorte rsync seulement --include-from cette sortie, donc la liste complète ne doit être calculée qu'une seule fois.

Si cela n'a même aucun sens, faites-le moi savoir.

Au fait, j'ai tendance à utiliser rsync -hva --progress --stats --delete --exclude-from "$EXCLUDEFILE". Si vous avez également une suggestion sur les options que vous utiliseriez, faites-le moi savoir. J'essaie de dupliquer le contenu d'un disque dur externe (qui ne contient que des images, des vidéos et des documents) sur un autre disque dur externe.

26
Manuel

Il est certainement possible d'utiliser la liste de fichiers générée lors d'un essai à sec comme fichier inclus. Dans l'idéal, cependant, les lignes supplémentaires en haut et en bas de la sortie d'essai à sec doivent être supprimées.

Exemple de sortie:

sending incremental file list
[LIST OF FILES]

sent 226 bytes  received 34 bytes  520.00 bytes/sec
total size is 648,373,274  speedup is 2,493,743.36 (DRY RUN)

Pour supprimer ces lignes, canalisez la sortie rsync dans head et dans tail. Ensuite, enregistrez la sortie traitée dans un fichier include:

rsync --dry-run -avz source/ destination/ | head --lines=-3 | tail --lines=+3 > include.txt

Enfin, dites à rsync d'utiliser le fichier include généré (en ajoutant des options supplémentaires si vous le souhaitez):

rsync --include-from=include.txt --exclude=* source/ dest/

23
ThatGuy