Je veux copier tous les fichiers du serveur A vers le serveur B qui ont le même nom de répertoire parent à différents niveaux de la hiérarchie du système de fichiers, par exemple:
/var/lib/data/sub1/sub2/commonname/filetobecopied.foo
/var/lib/data/sub1/sub3/commonname/filetobecopied.foo
/var/lib/data/sub2/sub4/commonname/anotherfiletobecopied.foo
/var/lib/data/sub3/sub4/differentname/fileNOTtobecopied.foo
Je veux copier les trois premiers fichiers qui ont tous le chemin d'accès commonname
vers le serveur B. J'ai déjà passé beaucoup de temps à trouver les bons motifs d'inclusion/exclusion pour rsync
mais je ne reçois pas il. La commande suivante ne fonctionne pas:
rsync -a --include='**/commonname/*.foo' --exclude='*' [email protected]:/var/lib/data /var/lib/data
Je correspond trop ou à peu de fichiers. Comment puis-je synchroniser uniquement les fichiers avec le commonname
sur son chemin?
Je suppose que vous cherchez ceci:
rsync -a -m --include='**/commonname/*.foo' --include='*/' --exclude='*' [email protected]:/var/lib/data /var/lib/data
Il y a 2 différences avec votre commande:
--include='*/'
. Sans cela, comme vous l'avez spécifié --exclude='*'
, rsync
n'entrera jamais dans les sous-répertoires, car tout est exclu. Avec --include='*/'
, les sous-répertoires ne sont plus exclus, donc rsync
peut joyeusement reprendre.-m
: cela élague les répertoires vides. Sans cela, vous obtiendrez également le sous-répertoire (vide) /var/lib/data/sub3/sub4/differentname/
copié.