Inclure les fichiers cachés dans les glob patterns

Accueil Tags Recherche

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 celà s’appelait comme ça :

$ cp from/* to/

Vous aurez remarqué (soit immédiatement après la copie et avec une pointe de suprise, 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 parmis 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 !

Liens :

man glob
man bash
ZSH Glob Qualifiers