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
où 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?
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"
, rsync
ne 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") Downloads
name__, 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 rsync
name__, "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é chris
dans le répertoire cible, contenant tout ce qui provient de /home/chris
(à l'exception du Downloads
d'origine). répertoire, bien sûr!).
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.