15 votes

rsync utilisant une expression rationnelle pour inclure seulement certains fichiers

J'essaie d'exécuter rsync pour copier des fichiers de manière récursive le long d'un chemin en fonction de leur modèle de nom de fichier, en respectant la casse. insensible . C'est ce que j'ai fait pour exécuter rsync :

$ rsync -avvz --include ='*/' --include='.*[Nn][Aa][Mm][E].*' --exclude='*' ./a/ ./b/

Rien n'est copié, la sortie de débogage montre :

[sender] hiding file 1Name.txt because of pattern *
[sender] hiding file 1.txt because of pattern *
[sender] hiding file 2.txt because of pattern *
[sender] hiding file Name1.txt because of pattern *
[sender] hiding directory test1 because of pattern *
[sender] hiding file NaMe.txt because of pattern *

J'ai essayé d'utiliser : --include='*[Nn][Aa][Mm][E]*' et d'autres combinaisons mais ça ne marche toujours pas.

Des idées sur la façon d'utiliser l'expression rationnelle pour inclure certains fichiers ?

0voto

[EDIT] Cela ne fonctionne que localement. Pour les chemins distants, la structure du répertoire doit d'abord être créée.

Plus simple que la réponse acceptée ; Utilisez --file-from, qui inclut automatiquement les répertoires parents et imprimez le chemin du fichier avec %P.

find /tmp/source -wholename '*[Nn][Aa][Mm][E]*' -printf '%P\n' | rsync -vzrm --exclude='*/' --files-from=- /tmp/source/ /tmp/target/

Il suffit donc d'utiliser find y rsync .

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X