Comment exclure un dossier de rsync

60

J'essaie de sauvegarder mon dossier personnel sur mon lecteur NAS. Je donne ceci:

rsync -Paz --exclude-from 'rsync-exclude.txt' /home/chris/ [email protected]:LinuxHome

rsync-exclude.txta ce contenu:

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

et c’est dans le même dossier que j’exécute rsync (dossier personnel).

Cependant, rsync essaie également de copier ce dossier.

Qu'est-ce que je fais mal?

xpanta
la source

Réponses:

88

Vous fournissez des chemins absolus dans votre liste d'exclusion.

Avec rsync, tous les chemins d’exclusion (ou d’inclusion!) Commençant par /sont ancrés à la " racine de transfert ".

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

rsync -Paz --exclude-from 'rsync-exclude.txt' / [email protected]:

... alors vos exclusions devraient fonctionner (mais vous copieriez tout le reste sur ce système de fichiers!).

Mais puisque vous essayez juste de synchroniser votre maison répertoire, et il n'y a pas de sous - répertoire /home/chrisnommé "home/chris/Downloads", rsyncne trouve rien qui correspond.

Essayez donc de supprimer les /home/chrispièces de votre rsync-exclude.txtfichier.

En fait, vous n’auriez besoin que d’une seule ligne dans le fichier:

/Downloads

Notez que si vous ne spécifiez pas l'interligne /et que d'autres répertoires sont nommés "Downloads", ceux-ci seront également exclus. Je suppose que vous souhaitez uniquement exclure votre répertoire "de niveau supérieur" (par rapport au répertoire source, autrement dit "racine du transfert") Downloads, de sorte que vous souhaiterez le principal /.

LE PLUS FACILE (pour n'exclure que quelques chemins)

Si vous n'avez besoin que d'exclure un répertoire, procédez comme suit (en évitant un fichier séparé):

rsync -Paz --exclude /Downloads /home/chris/ [email protected]:LinuxHome

Vous pouvez également chaîner des --excludetags, comme ceci:

rsync -Paz --exclude /Downloads --exclude '/Something Else' --exclude .hiddenFile /home/chris/ [email protected]:LinuxHome

Notez que puisqu'il n'y a pas de barre oblique, celui-ci sera exclu .hiddenFilede tous les répertoires qu'il copie!

Mais si vous avez plus que quelques exclusions, il vaut mieux utiliser --exclude-fromun fichier.

Remarque

Je vois que vous avez bien compris, mais les nouveaux utilisateurs de rsync devraient noter la barre oblique à la fin de/home/chris/

Pour citer la rsyncpage de manuel, "vous pouvez considérer un point final / sur une source comme signifiant" copier le contenu de ce répertoire "par opposition à" copier le répertoire par son nom "."

Donc, si vous laissiez de côté la barre oblique finale, vous obtiendriez un répertoire appelé chrisdans le répertoire cible, contenant tout le contenu de /home/chris(sauf le Downloadsrépertoire d' origine , bien sûr!).

Lambart
la source
2

Cela pourrait être plus facile pour les yeux, et juste une note sur l'exclusion des répertoires et de 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 \

Cela exclura ces répertoires et tous les fichiers qu'ils contiennent. Pour une raison quelconque, rysnc n'a pas ajouté / home / nom d'utilisateur à /.cache. Seul home / s'ancrerait lui-même, j'ai donc dû ajouter / nom d'utilisateur à chaque répertoire exclu.

Les pages de manuel disent: "si le motif commence par un /, il est ancré à un endroit particulier de la hiérarchie des fichiers, sinon il correspond à la fin du 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.

Jltrinchard
la source