web-dev-qa-db-fra.com

Comment exclure un dossier de rsync

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.txt a 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?

58
xpanta

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 simplement de synchroniser votre répertoire home , il n’existe aucun sous-répertoire de /home/chris nommé "home/chris/Downloads", rsyncne trouve rien qui corresponde.

Essayez donc de supprimer les parties /home/chris de votre fichier rsync-exclude.txt.

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

/Downloads

Note Si vous ne spécifiez pas le / en tête et que vous avez d'autres répertoires nommés "Downloads", ceux-ci seront également exclus. Je suppose que vous souhaitez uniquement exclure votre "niveau supérieur" (par rapport au répertoire source, autrement dit la "racine de transfert") Downloadsname__, de sorte que vous souhaiterez utiliser le / qui précède.

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 les balises --exclude, comme suit:

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

Notez que comme il n'y a pas de barre oblique, on exclura .hiddenFile ( de tout de tous les répertoires qu’il copie!

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

Note

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

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

Ainsi, si vous omettiez cette barre oblique finale, vous obtiendrez un répertoire appelé chrisdans le répertoire cible, contenant tout ce qui provient de /home/chris (à l'exception du Downloadsd'origine). répertoire, bien sûr!).

87
Lambart

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 modèle commence par un /, il est ancré à un emplacement particulier dans 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.

2
jltrinchard