Maîtriser les glob patterns Bash sans se tromper
Apprenez à utiliser *, ?, [], et extglob dans Bash pour sélectionner des fichiers avec précision, éviter les erreurs et gagner du temps.

- Difficulté
- Facile
Les glob patterns de Bash permettent de viser plusieurs fichiers d'un seul coup, sans écrire chaque nom à la main. Bien utilisés, ils font gagner du temps; mal utilisés, ils sélectionnent trop, ou pas assez.
Ce tutoriel vous guide pas à pas avec des gestes concrets: créer un terrain d'essai, visualiser ce que Bash sélectionne, puis affiner vos motifs avec *, ?, [] et extglob. L'objectif est simple: manipuler vos fichiers sans erreur évitable.
Prérequis
Vous avez accès à un terminal Bash sur Linux. Vous savez ouvrir un terminal, vous déplacer dans un dossier avec cd et lire une sortie simple.
Les exemples restent prudents: on commence par afficher les fichiers sélectionnés avant d'utiliser des commandes comme cp ou mv.
Matériel nécessaire
- Un terminal Bash
- Un dossier de test où créer quelques fichiers
Étapes
Créer un dossier de test
Commencez dans un emplacement sans risque, par exemple votre dossier personnel. Créez un dossier dédié puis entrez dedans.
mkdir -p ~/glob-demo cd ~/glob-demoCréez ensuite quelques fichiers et sous-dossiers variés pour tester vos motifs. Gardez des noms simples au début, puis ajoutez des cas proches les uns des autres.
touch rapport.txt rapport.md notes.txt notes1.txt notes2.txt image.jpg image.png mkdir archives sauvegardes touch archives-2024.tar archives-2025.tar touch data01.csv data02.csv data10.csv touch log-a.txt log-b.txt log-z.txtAfficher les correspondances avant d'agir
Avant de copier, déplacer ou supprimer, affichez d'abord ce que Bash sélectionne. Utilisez
printfpour voir chaque résultat sur sa propre ligne.printf '%s\n' *.txtSi des fichiers correspondent, vous verrez leur nom listé un par un. Répétez ce réflexe à chaque nouveau motif un peu délicat.
Sélectionner largement avec l'astérisque

Le motif
*sert à viser une suite de caractères dans un nom de fichier. Commencez par l'utiliser pour lister tous les fichiers texte du dossier.printf '%s\n' *.txtVous pouvez aussi l'insérer au milieu d'un motif. Par exemple, cette commande vise les fichiers dont le nom commence par
rapport, quelle que soit la fin.printf '%s\n' rapport*Pour une action réelle, gardez le même motif dans une commande de copie. Testez d'abord, puis copiez vers un sous-dossier si le résultat vous convient.
mkdir -p textes printf '%s\n' *.txt cp *.txt textes/Viser une seule position avec le point d'interrogation
Le motif
?remplace exactement un caractère. Il est utile quand vos fichiers suivent une numérotation courte et régulière.printf '%s\n' data0?.csvIci,
data01.csvetdata02.csvcorrespondent, mais pasdata10.csv. Vous pouvez l'utiliser aussi pour des lettres simples.printf '%s\n' log-?.txtFiltrer précisément avec des crochets

Les crochets
[]servent à choisir un caractère parmi plusieurs à une position donnée. Par exemple, cette commande sélectionne uniquement certains journaux.printf '%s\n' log-[ab].txtVous pouvez aussi utiliser un intervalle simple. Essayez ce motif pour viser les notes numérotées de 1 à 2.
printf '%s\n' notes[1-2].txtCette forme devient très pratique quand plusieurs fichiers ont une structure proche. Elle reste plus sûre qu'un
*quand vous connaissez déjà les caractères attendus.Combiner plusieurs motifs pour une tâche concrète
Les motifs deviennent vraiment utiles quand vous les reliez à une action courante. Créez un dossier de destination, affichez les fichiers visés, puis copiez-les.
mkdir -p selection printf '%s\n' notes?.txt log-[ab].txt cp notes?.txt log-[ab].txt selection/Vous pouvez aussi déplacer un groupe plus ciblé. Ici, seuls les fichiers CSV à deux chiffres commençant par
0seront affichés puis déplacés.mkdir -p csv-courts printf '%s\n' data0?.csv mv data0?.csv csv-courts/Activer extglob dans Bash
Pour aller plus loin, activez l'option
extglobdans votre session Bash. Elle ajoute des formes de motifs pratiques pour exprimer plusieurs alternatives.shopt -s extglobVérifiez ensuite qu'elle est bien activée avec une commande de contrôle simple.
shopt extglobChoisir plusieurs alternatives avec extglob
Une fois
extglobactivé, vous pouvez regrouper plusieurs possibilités dans un seul motif. Essayez par exemple de viser deux extensions précises.printf '%s\n' *.@(txt|md)Vous pouvez aussi cibler plusieurs débuts de nom. Cette commande sélectionne les fichiers qui commencent par
rapportounotes.printf '%s\n' @(rapport*|notes*)Sur un cas concret, cela simplifie une copie ciblée sans multiplier les commandes. Testez d'abord, puis copiez.
mkdir -p docs printf '%s\n' *.@(txt|md) cp *.@(txt|md) docs/Exclure un motif avec extglob
extglobpermet aussi d'exclure certaines formes avec!(...). C'est utile quand vous voulez presque tout, sauf un type bien identifié.printf '%s\n' !(*.png)Dans un dossier de test, cette commande affiche tout ce qui ne se termine pas par
.png. Vous pouvez ensuite l'appliquer à une copie ou à un déplacement, avec prudence.mkdir -p sans-png printf '%s\n' !(*.png) cp !(*.png) sans-png/Tester des cas limites sans casser votre commande
Quand un motif ne donne pas le résultat attendu, isolez le test. Lancez seulement
printfavec ce motif, puis ajustez une partie à la fois.printf '%s\n' notes*.txt printf '%s\n' notes?.txt printf '%s\n' notes[1-2].txtComparez ensuite les sorties. Vous verrez vite si votre sélection est trop large, trop étroite ou juste suffisante.
Appliquer un motif sûr à une commande réelle

Terminez par une action complète, mais prudente. Affichez d'abord des fichiers texte et Markdown, puis déplacez-les vers un dossier de classement.
mkdir -p classement printf '%s\n' *.@(txt|md) mv *.@(txt|md) classement/Après le déplacement, vérifiez le résultat avec une liste simple. Contrôlez à la fois le dossier courant et le dossier cible.
printf '%s\n' * printf '%s\n' classement/*
Erreurs fréquentes & dépannage
L'erreur la plus courante consiste à utiliser * trop tôt, alors qu'un ? ou un motif avec [] serait plus précis. Une autre erreur fréquente est d'appliquer directement un motif à mv ou cp sans l'avoir affiché auparavant avec printf.
Avec extglob, l'oubli de shopt -s extglob est classique. Enfin, les motifs d'exclusion comme !(...) demandent une vigilance particulière, car ils peuvent inclure beaucoup plus de fichiers que prévu.
Astuces & pour aller plus loin
Gardez un dossier de test avec quelques fichiers représentatifs pour essayer vos motifs avant usage réel. Pensez aussi à partir du motif le plus strict possible, puis à l'élargir seulement si nécessaire.
Quand un motif vous semble ambigu, écrivez deux ou trois variantes proches et comparez leur sortie avec printf '%s\n'. Cette micro-vérification prend peu de temps et évite beaucoup d'erreurs de sélection.
Questions fréquentes
Quelle différence entre * et ? dans Bash ?
* vise une suite de caractères dans un nom, alors que ? vise exactement une seule position. Si vous connaissez la longueur attendue à cet endroit, ? est souvent plus sûr.
Pourquoi utiliser printf avant cp ou mv ?
printf permet de voir la liste réelle des fichiers sélectionnés par le motif. Vous validez ainsi le résultat avant d'exécuter une commande qui modifie l'organisation de vos fichiers.
À quoi servent les crochets [] ?
Ils servent à choisir un caractère précis parmi plusieurs possibilités à une position donnée. Par exemple, log-[ab].txt ne vise que les fichiers finissant par a ou b à cet endroit du nom.
Comment activer extglob ?
Dans Bash, activez-le avec shopt -s extglob. Vous pourrez alors utiliser des formes comme *.@(txt|md) ou !(*.png).
Puis-je utiliser plusieurs motifs dans une seule commande ?
Oui. Vous pouvez écrire, par exemple, cp notes?.txt log-[ab].txt selection/ après avoir testé la sélection. Chaque motif est développé séparément avant l'exécution de la commande.
Conclusion
Les glob patterns Bash sont un levier simple pour travailler plus vite sur des groupes de fichiers, à condition de rester précis. En pratiquant d'abord avec *, ? et [], puis avec extglob, vous gagnez en confort sans perdre en sécurité.
Retenez surtout la méthode: tester avec printf, affiner le motif, puis seulement agir. C'est ce petit ordre d'exécution qui fait la différence entre une ligne de commande rapide et une ligne de commande fiable.