Je pense que -- inclure
est utilisé pour inclure un sous-ensemble de fichiers qui sont sinon exclus par -- exclure
, plutôt que d'inclure seulement ces fichiers. En d'autres termes: vous devez penser à inclure signifiant ne pas exclure.
Essayez plutôt:
rsync -zarv --include "*/" --exclude="*" --include="*.sh" "$from" "$to"
Pour rsync version 3.0.6 ou supérieure, l'ordre doit être modifié comme suit (voir les commentaires):
rsync -zarv --include="*/" --include="*.sh" --exclude="*" "$from" "$to"
Ajouter le drapeau -m
évitera la création de structures de répertoire vides dans la destination. Testé dans la version 3.1.2.
Donc si nous voulons seulement les fichiers *.sh nous devons exclure tous les fichiers --exclure="*"
, inclure tous les répertoires --inclure="*/"
et inclure tous les fichiers *.sh --inclure="*.sh"
.
Vous pouvez trouver de bons exemples dans la section Règles de modèles d'inclusion/exclusion de la page de l'homme