Question Comment exclure plusieurs répertoires avec rsync?


J'essaie de sauvegarder mon répertoire personnel à l'aide de rsync et je souhaite exclure certains des répertoires contenant des données indésirables. Je veux exclure spécifiquement /home/ben/.ccache et /home/ben/build. Malheureusement, la documentation de rsync était une surcharge d'informations et n'a pas répondu à ma question. C'est ce que j'ai essayé:

rsync -arv --exclude "/home/ben/.ccache:/home/ben/build" /home/ben /media/ben/thumbdrive/

Quel est le bon moyen de le faire?


136
2017-07-15 23:53


origine


Je voulais juste dire que le drapeau a implique r déjà :) -a, --archive archive mode; equals -rlptgoD (no -H,-A,-X) - Populus


Réponses:


OK je me sens vraiment bête. Avant même que je poste cette question, mon ami m'a montré comment le faire et c'est très simple. Pour exclure plusieurs répertoires, il suffit d'utiliser plusieurs --exclude=path commutateurs. Donc, ma commande ci-dessus correctement écrite est la suivante:

rsync -arv --exclude=.ccache --exclude=build /home/ben /media/ben/thumbdrive/

178
2017-07-15 23:53



Un chemin absolu a fait ne pas travailler pour moi (le répertoire spécifié était silencieusement non exclu), alors qu'un chemin relatif au répertoire source fonctionnait correctement. Peut-être que je manque quelque chose, mais je serais prudent sur l'affirmation de @FreeSoftwareServers selon laquelle les chemins absolus fonctionnent toujours. - Soren Bjornstad
FWIW, un peu créatif diff l'utilisation peut être utile. Supposons que vous ajustez les indicateurs d'exclusion de l'exécution pour l'exécuter nas_backup.sh. Supposons aussi que vous utilisez --dry-run. courir: . nas_backup.sh > dryrun.5.txt, ajuste exclut, puis exécute . nas_backup.sh > dryrun.6.txt  alors diff diff dryrun.5.txt dryrun.6.txt | less   cela vous montrera ce qui a été ajouté / retiré de la portée entre ces 2 exécutions. - JL Peyret
FYI: L'option -a comprend -r alors -ar est redondant. - David
Contrairement à ce que pense FreeSoftwareServers, le chemin d'exclusion est relatif au chemin source, NOT /. Donc, ce commentaire est catégoriquement faux et conduira à des échecs si vous le suivez. La meilleure stratégie consiste à ne pas tenir compte de vos exclusions pour éviter ce type d’erreur mentale. Si source est / home / me et si vous excluez = / mydir / cela exclut le répertoire mydir dans / home / me, c'est-à-dire qu'il exclut / home / me / mydir NOT / mydir / at /. Il est malheureux que je ne puisse ni abaisser ni éditer ce commentaire car il est techniquement faux et induira en erreur. - Lizardx
thegeekstuff.com/2011/01/rsync-exclude-files-and-folders/ l'explique très clairement, notez la section: 4. Le chemin d'exclusion est toujours relatif (au chemin source) - Lizardx


Lorsque vous avez plusieurs répertoires et / ou fichiers à exclure, créez un fichier texte et utilisez le --exclude-from commutateur. Faire un fichier appelé exclude_me.txt et en y listant vos exclusions. Exemple (/home/ben/exclude_me.txt):

.ccache
build
.java
.gvfs
.xsession-errors

Alors votre rsync ressemblerait à quelque chose comme:

rsync -arv --exclude-from='/home/ben/exclude_me.txt' /home/ben /media/ben/thumbdrive/

Voici quelques informations sur les règles de filtrage qui peuvent vous aider:

  • /dir/ signifie exclure le dossier racine /dir
  • /dir/* signifie obtenir le dossier racine /dir mais pas le contenu
  • dir/ signifie exclure tout dossier où le nom contient dir/

  • Exemples exclus: /dir/, /usr/share/directory/, /var/spool/dir/ /var/spool/lpd/cf signifie ignorer les fichiers qui commencent par cf dans n'importe quel dossier dans /var/spool/lpd

Voir aussi le règles de filtrage section sur la page de manuel.


85
2018-05-19 15:13



Il est important de noter que dossier racinesignifie le racine du transfert pas le répertoire racine. - jamesdlin


Vous pouvez également exclure plusieurs chemins entre accolades:

rsync -arv --exclude={.ccache,build} /home/ben /media/ben/thumbdrive/

58
2017-09-18 08:59



cela fonctionne bien, mais pas sous sh, seulement sous bash, j'ai découvert "le chemin difficile" - xor
Pas d'espace après la virgule. J'ai appris que la dure aussi - styl3r