Inclure les fichiers cachés dans les glob patterns
Accueil Tags Recherche31 Janvier 2020
Inclure les fichiers cachés dans les glob patterns
Comment inclure les fichiers cachés dans vos commandes cp ?Les glob patterns
Pour copier le contenu d’un dossier (et uniquement son contenu), vous avez sûrement déjà utilisé un “glob pattern” sans même savoir que cela s’appelait comme ça :
cp from/* to/
Vous aurez remarqué (soit immédiatement après la copie et avec une pointe de surprise, soit après avoir supprimé le dossier from
et avec une pointe de regret) que les fichiers cachés ne sont pas copiés avec cette commande.
En effet et par défaut, les glob patterns excluent (pour des raisons de sécurité) les fichiers cachés.
La solution universelle
Une solution qui fonctionnera partout sera de lancer deux copies :
- une pour les fichiers visibles
- une pour les fichiers cachés
cp from/* to/
cp from/.* to/
Cette solution nécessite deux commandes, ce qui est somme toute contraignant, mais fonctionnel.
Un peu d’élégance avec shopt
Cette seconde solution va utiliser les options de shell pour venir changer le comportement par défaut, et inclure les fichiers cachés dans les glob patterns grace à l’option dotglob
(que nous activons via le flag -s
):
shopt -s dotglob
cp from/* to/
Pour revenir au comportement par défaut, il faudra désactiver l’option avec le flag -u
:
shopt -u dotglob
Plus élégant, mais tout aussi contraignant.
ZSH à la rescousse
Si vous utilisez ZSH, bonne nouvelle pour vous car celui-ci supporte des flags (des Qualifiers) pour agir directement sur les glob patterns dans vos commandes. Et parmi ces flags, il en existe un pour activer l’option dotglob
à la volée :
cp from/*(D) to/
Je vous invite vraiment à faire un tour sur la documentation des Glob Qualifiers, on y trouve une foule d’informations intéressantes pour simplifier vos scripts ZSH !