Utiliser les caractères génériques et le globbing

ShellBeginner
Pratiquer maintenant

Introduction

Imaginez une pièce en désordre avec des centaines de feuilles éparpillées.

  • Certaines sont des devoirs (math_hw.txt, english_hw.txt).
  • Certaines sont des photos (pic1.png, pic2.png).
  • Certaines sont des déchets (temp_1, temp_2).

Si vous voulez déplacer toutes les photos dans une boîte, vous ne les ramassez pas une par une. Vous dites plutôt : « Ramasse tout ce qui ressemble à une photo. »

Sous Linux, nous faisons cela avec des caractères génériques (également appelés globbing). Ils ressemblent aux cartes « Joker » d’un jeu de cartes : ils peuvent remplacer d’autres caractères.

Cette idée est puissante, car elle vous permet de travailler avec des motifs plutôt qu’avec des noms individuels. Sur les systèmes réels, il peut y avoir des dizaines, des centaines ou des milliers de fichiers correspondants. La sélection fondée sur des motifs explique en partie pourquoi le travail dans un shell s’adapte aussi bien à grande échelle.

Dans ce laboratoire, vous apprendrez à utiliser deux symboles puissants :

  1. L’astérisque (*) : représente n’importe quelle suite de caractères.
  2. Le point d’interrogation (?) : représente un seul caractère.

Sélectionner plusieurs fichiers (*)

L’astérisque * est le caractère générique le plus connu. Il signifie : « faire correspondre un nombre quelconque de caractères, y compris zéro ».

Voyons ce que contient notre dossier en désordre :

ls

Cette commande affiche les fichiers. Imaginons maintenant que vous vouliez uniquement lister les fichiers texte, c’est-à-dire les fichiers dont le nom se termine par .txt.

Au lieu de saisir ls notes.txt readme.txt report.txt, vous pouvez simplement saisir *.txt.

Cela signifie : « trouver tout fichier dont le nom se termine par .txt ».

ls *.txt

Sortie :

notes.txt  readme.txt  report.txt

Le shell a interprété *.txt, l’a développé pour faire correspondre tous les fichiers texte et a ignoré image.png ainsi que les autres fichiers. Vous venez de filtrer la liste !

Cette explication contient un concept important : c’est le shell qui effectue l’expansion du motif avant l’exécution de la commande ls. Autrement dit, ls reçoit souvent une liste de noms de fichiers déjà constituée, et non le motif *.txt brut. Cela explique pourquoi les caractères génériques fonctionnent avec de nombreuses commandes différentes.

Déplacer des fichiers avec *

Passons maintenant à une utilisation concrète. Nous avons plusieurs fichiers de données : data_2025.csv, data_2024.csv, data_old.log.

Nous voulons faire du rangement. Déplaçons tous les fichiers dont le nom commence par data_ dans un dossier de sauvegarde.

Commencez par créer ce dossier :

mkdir backup

Utilisez ensuite le caractère générique pour déplacer tous les fichiers en une seule fois. Le motif data_* correspond à tout nom qui commence par data_.

mv data_* backup/

Nous venons d’indiquer à Linux : « si le nom commence par data_, déplace le fichier dans le dossier de sauvegarde ».

C’est ici que les caractères génériques deviennent vraiment utiles. Au lieu de répéter une commande pour chaque fichier correspondant, vous exprimez une seule fois la règle de nommage et laissez le shell effectuer l’expansion.

Vérifiez que les fichiers ont bien disparu du répertoire actuel :

ls

Vérifiez ensuite qu’ils sont bien arrivés dans le dossier de sauvegarde :

ls backup

C’est réussi ! Vous avez déplacé trois fichiers avec une seule commande.

Sélectionner un seul caractère (?)

L’astérisque * est gourmand : il peut correspondre à tout. Il faut parfois être plus précis.

Le caractère générique point d’interrogation ? représente exactement un caractère.

Cela rend ? plus précis que *. Il est utile lorsque les noms de fichiers suivent un format prévisible et que vous voulez éviter de faire correspondre par erreur des noms plus longs que prévu.

Nous avons des fichiers nommés temp_1, temp_2 et temp_a.

  • temp_* correspondrait à temp_1 et à temp_very_long_name.
  • temp_? ne correspond que lorsqu’il y a exactement un caractère après le caractère de soulignement.

Testons le motif avant de supprimer les fichiers (c’est toujours une bonne habitude !) :

ls temp_?

Correspondances : temp_1, temp_2, temp_a.

Maintenant que nous sommes certains du résultat, supprimons-les :

rm temp_?

Vérifiez qu’ils ont bien disparu :

ls

Cette méthode est très utile pour sélectionner des fichiers qui respectent une structure de nommage précise.

Retenez également la précaution utilisée ici : prévisualisez un motif avec une commande non destructive comme ls avant de l’utiliser avec rm ou mv. La correspondance par motifs est puissante ; il est donc préférable de vérifier les fichiers concernés avant d’agir.

Résumé

Vous avez découvert la puissance de la correspondance par motifs.

  • * (astérisque) : le caractère générique « faire correspondre tout ». Il est idéal pour sélectionner tous les fichiers d’un type (*.png) ou tous les fichiers d’une série (day_*).
  • ? (point d’interrogation) : le caractère générique « un seul caractère ». Il est idéal pour effectuer une sélection précise (file_?.txt).

Ce module 2 est terminé. Vous savez maintenant comment :

  1. Parcourir l’arborescence des fichiers (pwd, cd, ls).
  2. Créer des fichiers et des dossiers (touch, mkdir).
  3. Les copier et les déplacer (cp, mv).
  4. Les supprimer (rm, rmdir).
  5. Les sélectionner par lots (*, ?).

Vous êtes prêt pour le module 3, dans lequel nous ouvrirons ces fichiers pour lire et modifier le texte qu’ils contiennent !