J'utilise Fedora 17 64 bits et rsync --exclude=/home/ben/<dir>
ne fonctionne pas comme prévu.
J'essaie de rsync
mon répertoire personnel vers une clé USB, mais je veux exclure certainement les répertoires contenant des fichiers de cache et des fichiers de construction. C'est la commande que j'utilise:
rsync --exclude=/home/ben/build/ --exclude=/home/ben/.ccache -arv /home/ben home-ben/
Cependant, le contenu de ~/build
et ~/.ccache
est en cours de copie par rsync
. Qu'est-ce que je fais mal?
Réponses:
Les
rsync
règles de filtrage globales commençant par un interligne/
sont ancrées à la racine du transfert. Citant la section "INCLUDE / EXCLUDE PATTERN RULES" de la page de manuel:Dans votre commande (
rsync ... -arv /home/ben home-ben/
), le fichier/home/ben/foo
serait transféré àhome-ben/ben/foo
. La racine du transfert esthome-ben
et le chemin de filtre correct est/ben/foo
. Ainsi,/home/ben/.ccache
vous avez besoin d'un chemin de filtre de/ben/.ccache
/home/ben/build/
vous avez besoin d'un chemin de filtre de/ben/build/
Vous trouverez une explication plus détaillée dans la section "ANCRAGE INCLUANT / EXCLUER LES MOTIFS" de la
rsync(1)
page de manuel .Notez que le
/
fait de ne pas laisser passer le premier n’est pas nécessairement ce que vous voulez. Citant encore de la même section de page de manuel:Ainsi, un modèle de filtre de
build/
correspondrait à un répertoire de construction n'importe où/home/ben
, même/home/ben/many/sub/directories/build/
.la source
rsync -a source destination
le répertoire source est copié dans la destination. Cela détermine quelle sera la racine du transfert afin d'informer l'expression à exclure. L'utilisation correcte de / dans l'expression d'exclusion est ensuite expliquée ci-dessus. Notez en particulier quersync --exclude='/dir1' source destination
rien n'exclut.Je pense que vos
exclude
chemins doivent être relatifs au chemin source. Pouvez-vous essayer cela à la place?Voici un test, à titre de comparaison:
la source
--verbose
commande, c'est le format que vous devez utiliser.J'ai eu ce problème dans un script (je ne sais pas si c'est votre cas). J'étais parce que j'ai utilisé cette commande dans un script et que j'utilisais sh au lieu de bash. vérifiez le shebang au début de votre script.
la source
Votre modèle d'exclusion fonctionnerait si vous synchronisez le chemin d'accès complet / home, c'est-à-dire sans barre oblique finale:
Mais mieux vaut seulement rsync le contenu du dossier avec un slash de fin:
Vous pouvez aussi utiliser une liste ignore, voir: https://askubuntu.com/questions/545655/backup-your-home-directory-with-rsync-and-skip-useless-folders
la source
Pour exclure un dossier spécifique avec rsync, vous devez considérer le chemin relatif dans la commande. dans votre cas:
où "ben" est le dossier que vous synchronisez
la source