61 votes

Comment exclure un dossier de rsync ?

J'essaie de sauvegarder mon dossier personnel sur mon disque NAS. J'obtiens ceci :

rsync -Paz --exclude-from 'rsync-exclude.txt' /home/chris/ admin@192.168.1.65:LinuxHome

rsync-exclude.txt a ce contenu :

/home/chris/Downloads/*
/home/chris/Downloads/
/home/chris/Downloads/*.*

et il se trouve dans le même dossier que celui où j'exécute rsync (dossier personnel).

Cependant, le rsync essaie de copier ce dossier également.

Qu'est-ce que je fais de mal ?

94voto

Lambart Points 2490

Vous fournissez absolu dans votre liste d'exclusion.

Avec rsync, tous les chemins d'exclusion (ou d'inclusion !) commençant par / sont ancrés dans le " racine du transfert ".

La racine du transfert dans ce cas est /home/chris . Si vous l'avez fait :

rsync -Paz --exclude-from 'rsync-exclude.txt' / admin@192.168.1.65:

...alors vos exclusions devraient fonctionner (mais vous copieriez les données de la base de données de l'entreprise). tout le reste sur ce système de fichiers !)

Mais puisque vous essayez juste de synchroniser votre domicile et il n'y a pas de sous-répertoire de /home/chris nommé "home/chris/Downloads" , rsync ne trouve rien qui corresponde.

Essayez donc d'enlever le /home/chris des pièces de votre rsync-exclude.txt fichier.

En fait, vous n'avez besoin que d'une seule ligne dans le fichier :

/Downloads

Note que si vous ne spécifiez pas le premier / et vous avez d'autres répertoires nommés "Downloads" Ceux-ci seraient également exclus. Je suppose que vous voulez seulement exclure votre "top-level" (relatif au répertoire source, alias la "racine du transfert"). Downloads vous devez donc utiliser les caractères de tête / .

LE MOYEN LE PLUS FACILE (pour exclure seulement quelques chemins)

Si vous n'avez besoin d'exclure qu'un seul répertoire, faites simplement ceci (en évitant un fichier séparé) :

rsync -Paz --exclude /Downloads /home/chris/ admin@192.168.1.65:LinuxHome

Vous pouvez également enchaîner --exclude comme ceci :

rsync -Paz --exclude /Downloads --exclude '/Something Else' --exclude .hiddenFile /home/chris/ admin@192.168.1.65:LinuxHome

Notez que puisqu'il n'y a pas de slash, celui-ci exclura .hiddenFile de tout chaque répertoire qu'il copie !

Mais si vous avez plus de quelques exclusions, vous feriez mieux d'opter pour --exclude-from et un fichier.

Note

Je vois que vous l'avez bien fait, mais ceux qui ne connaissent pas rsync doivent notez la barre oblique à la fin de /home/chris/

Pour citer le rsync Vous pouvez considérer qu'un / de fin de ligne sur une source signifie "copier le contenu de ce répertoire" par opposition à "copier le répertoire par son nom".

Donc, si vous n'utilisez pas le slash de fin, vous vous retrouverez avec un répertoire appelé chris dans le répertoire cible, contenant tout de /home/chris (sauf l'original Downloads bien sûr !).

4voto

jltrinchard Points 41

Cela pourrait être plus facile pour les yeux, et juste une note sur les répertoires d'exclusion et la syntaxe :

SRC='/home/username'
DST='/run/media/username/EasyStoreRT/rsync'

rsync -avrh --stats                                 \
    --log-file=/home/username/log/rsync-home.log    \
    --exclude='/username/.cache'                    \
    --exclude='/username/.local/share/Trash'        \
    $SRC \
    $DST \

Il exclura ces répertoires et tous les fichiers qu'ils contiennent. Pour une raison quelconque, rysnc n'ajoutait pas /home/username à /.cache. Seul home/ s'ancrait, donc je devais ajouter /username à chaque répertoire exclu.

Les pages du manuel indiquent que "si le motif commence par un /, il est ancré à un endroit particulier de la hiérarchie des fichiers, sinon il est comparé à la fin du nom de chemin". Mais, cette hiérarchie ne semble être que le premier répertoire du répertoire source. J'utilise bash, version 4.4.23(1)-release.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X