GNU/Linux >> Tutoriels Linux >  >> Linux

Impossible d'obtenir l'option d'exclusion de rsync pour exclure le répertoire

mkdir -p test/a/b/c/d/e
mkdir -p test/dest
rsync -nvraL test/a test/dest --exclude=a/b/c/d 

Cela marche. Comme test/a est le répertoire de base à partir duquel la synchronisation est effectuée, le modèle d'exclusion est spécifié en commençant par a/

Montrez-nous les vrais chemins/exclus si cela ne vous aide pas.

L'exécution de rsync avec -vn répertorie les répertoires/fichiers - le modèle est mis en correspondance avec le format imprimé par rsync.


L'une ou l'autre de ces solutions fonctionnerait :

rsync -nvraL test/a test/dest --exclude=/a/b/c/d
rsync -nvraL test/a/ test/dest --exclude=/b/c/d

Notez la fin / dans le chemin source fait une différence critique sur la façon dont --exclude doit être précisé. Cela suppose que nous avons :

mkdir -p test/a/b/c/d/e
mkdir -p test/a/other/place/a/b/c/d
mkdir -p test/dest

La publication d'origine rencontre des difficultés lorsque le chemin d'exclusion commence par un / . La réponse de Daniel est correcte que ce / initial dans le chemin d'exclusion peut être souhaitable pour exclure un chemin spécifique, et que ce / initial doit être compris comme le premier ^ dans les expressions régulières. Cependant, sa réponse a une faute de frappe critique sur la fin / dans le chemin source.


En suivant l'exemple d'Erik, vous voulez faire ceci :

rsync -nvraL test/a/ test/dest --exclude=/b/c/d

En fait, ni la réponse d'Erik ni d'Antoni n'est entièrement exacte.

Erik a à moitié raison de dire cela

Comme test/a est le répertoire de base à partir duquel la synchronisation est effectuée, le modèle d'exclusion est spécifié en commençant par a/

Il est vrai que la racine du modèle d'exclusion est test/a (c'est-à-dire le modèle /some/path se lie à test/a/some/path ), mais ce n'est pas toute l'histoire.

À partir de la page de manuel :

si le motif commence par un / alors il est ancré à un endroit particulier dans la hiérarchie des fichiers, sinon il est mis en correspondance avec la fin du nom de chemin. Ceci est similaire à un ^ de tête dans les expressions régulières. Ainsi "/foo" correspondrait à un fichier nommé "foo" à la "racine du transfert" (pour une règle globale) ou dans le répertoire du fichier de fusion (pour une règle par répertoire).

Nous pouvons ignorer le per-directory peu car cela ne s'applique pas à nous ici.

Par conséquent, rsync -nvraL test/a test/dest --exclude=a/b/c/d exclura très certainement test/a/b/c/d (et les enfants), mais cela exclura également test/a/other/place/a/b/c/d .

rsync -nvraL test/a test/dest --exclude=/b/c/d , en revanche, exclura uniquement test/a/b/c/d (et enfants) (test/a étant le point auquel / est ancré).

C'est pourquoi vous avez toujours besoin de la barre oblique initiale d'ancrage si vous souhaitez exclure ce chemin spécifique d'être sauvegardé. Cela peut sembler être un détail mineur, et il le sera plus votre modèle d'exclusion sera spécifique (par exemple, Pictures contre home/daniel/Pictures ) mais il pourrait juste vous mordre les fesses.


Linux
  1. Rsync :comment déplacer les liens symboliques absolus ?

  2. Option Rsync inconnue à partir de l'exécution du script Bash ?

  3. Rsync avec l'option de suppression, mais conserver ce qui est supprimé ?

  4. 6 exemples rsync pour exclure plusieurs fichiers et répertoires à l'aide de l'exclusion de

  5. Démarrer avec Latex sous Linux

Comment utiliser rsync pour exclure des fichiers et des répertoires dans le transfert de données

Comment exclure des fichiers et des répertoires avec Rsync

Le dossier d'exclusion Rsync ne fonctionne pas ?

Utilisation des options d'inclusion et d'exclusion de Rsync pour inclure le répertoire et le fichier par modèle

Impossible d'utiliser mkdir dans le répertoire personnel :autorisation refusée (Linux Lubuntu)

rsync et liens symboliques