Débutant

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.

Maîtriser les glob patterns Bash sans se tromper
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

  1. 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-demo

    Cré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.txt
  2. Afficher les correspondances avant d'agir

    Avant de copier, déplacer ou supprimer, affichez d'abord ce que Bash sélectionne. Utilisez printf pour voir chaque résultat sur sa propre ligne.

    printf '%s\n' *.txt

    Si des fichiers correspondent, vous verrez leur nom listé un par un. Répétez ce réflexe à chaque nouveau motif un peu délicat.

  3. Sélectionner largement avec l'astérisque

    Sur un bureau, un ordinateur affiche un dossier où de nombreux fichiers sont sélectionnés en même temps, avec une main au-dessus du clavier.

    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' *.txt

    Vous 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/
  4. 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?.csv

    Ici, data01.csv et data02.csv correspondent, mais pas data10.csv. Vous pouvez l'utiliser aussi pour des lettres simples.

    printf '%s\n' log-?.txt
  5. Filtrer précisément avec des crochets

    Gros plan sur une fenêtre de dossier où seul un sous-ensemble précis de fichiers est sélectionné parmi plusieurs éléments similaires.

    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].txt

    Vous 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].txt

    Cette 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.

  6. 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 0 seront affichés puis déplacés.

    mkdir -p csv-courts
    printf '%s\n' data0?.csv
    mv data0?.csv csv-courts/
  7. Activer extglob dans Bash

    Pour aller plus loin, activez l'option extglob dans votre session Bash. Elle ajoute des formes de motifs pratiques pour exprimer plusieurs alternatives.

    shopt -s extglob

    Vérifiez ensuite qu'elle est bien activée avec une commande de contrôle simple.

    shopt extglob
  8. Choisir plusieurs alternatives avec extglob

    Une fois extglob activé, 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 rapport ou notes.

    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/
  9. Exclure un motif avec extglob

    extglob permet 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/
  10. Tester des cas limites sans casser votre commande

    Quand un motif ne donne pas le résultat attendu, isolez le test. Lancez seulement printf avec ce motif, puis ajustez une partie à la fois.

    printf '%s\n' notes*.txt
    printf '%s\n' notes?.txt
    printf '%s\n' notes[1-2].txt

    Comparez ensuite les sorties. Vous verrez vite si votre sélection est trop large, trop étroite ou juste suffisante.

  11. Appliquer un motif sûr à une commande réelle

    Vue par-dessus l’épaule de mains devant un ordinateur, avec un petit groupe de fichiers clairement isolé avant une action 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.

Commentaires· Aucun commentaire pour l'instant

Soyez le premier à réagir.

Laisser un commentaire