Je fais habituellement rsync -n
avant de faire un réel rsync
. 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
alors j'obtiens une simulation de ce rsync
qui ferait, mon idée serait de prendre cette sortie, de la traiter puis de rsync
ne faire que --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.
Soit dit en passant, 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.
la source
--dry-run
commande dans un fichier (par exemple,rsync --dry-run -avz SOURCE DEST > include.txt
), en supprimant toutes les lignes qui ne sont pas des fichiers / chemins de include.txt et en cours d'exécutionrsync --include-from include.txt
.rsync --include-from include.txt --exclude=* SOURCE DEST
. Voir stackoverflow.com/a/19296415/1765910 pour plus de détails.rsync
mais je ne sais rien des scripts shell / bash…Réponses:
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:
Pour supprimer ces lignes, dirigez la
rsync
sortie vershead
et verstail
. 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/
la source
tail
/ est-ellehead
suffisamment robuste pour garantir de n'avoir que la liste des fichiers?--delete
entraîne également la suppression des fichiers supprimés des répertoires source des répertoires de destination, du moins sur l'ordinateur sur lequel je l'ai essayé. Vous pouvez laisser de côté la partietail
/head
.rsync
interprète chaque ligne du fichier inclus comme un nom de fichier et ignore simplement les fichiers non existants, donc rien ne se passera si vous conservez les lignes supplémentaires (sauf si vous avez des fichiers nommés "envoi d'une liste de fichiers incrémentielle", etc., auquel cas, ces fichiers seront également copiés).