Introduction
Les jokers Linux (wildcards), également connus sous le nom de motifs de globbing, sont des caractères spéciaux utilisés dans le shell pour faire correspondre et développer les noms de fichiers. Comprendre comment utiliser ces outils puissants peut grandement améliorer votre efficacité lorsque vous travaillez avec la ligne de commande Linux. Ce tutoriel vous guidera à travers les bases des jokers Linux et démontrera comment les exploiter pour copier des fichiers avec des motifs spécifiques, vous aidant ainsi à rationaliser vos tâches de gestion de fichiers.
Comprendre les Jokers de Base
En Linux, les jokers (wildcards) sont des caractères spéciaux qui vous aident à faire correspondre plusieurs fichiers en utilisant des motifs. Ils sont particulièrement utiles lorsque vous devez gérer de nombreux fichiers à la fois. Explorons les jokers les plus courants en examinant les fichiers de notre répertoire actuel.
Tout d'abord, voyons tous les fichiers avec lesquels nous devons travailler :
cd ~/project/wildcards_lab
ls
Vous devriez voir une liste de fichiers avec diverses extensions comme celle-ci :
backup data_02.csv doc2.pdf file3.txt image3.jpg readme.md
config.yml data_03.csv documents images report1.txt report_final.txt
data_01.csv doc1.pdf file1.txt image1.jpg report2.txt script.sh
file2.txt image2.jpg
Le Joker Astérisque (*)
L'astérisque * est le joker le plus courant. Il correspond à un nombre quelconque de caractères (y compris zéro). Voyons-le en action :
Pour lister tous les fichiers texte (se terminant par .txt) :
ls *.txt
Vous devriez voir :
file1.txt file2.txt file3.txt report1.txt report2.txt report_final.txt
Pour lister tous les fichiers image (se terminant par .jpg) :
ls *.jpg
Sortie :
image1.jpg image2.jpg image3.jpg
Le Joker Point d'Interrogation (?)
Le point d'interrogation ? correspond exactement à un caractère. Utilisons-le pour trouver des fichiers :
ls file?.txt
Cette commande listera les fichiers qui commencent par "file", suivis exactement d'un caractère, et se terminent par ".txt".
Sortie :
file1.txt file2.txt file3.txt
Le Joker Crochets ([])
Les crochets [] vous permettent de faire correspondre n'importe quel caractère unique d'un ensemble spécifié :
ls data_0[1-2].csv
Cette commande liste les fichiers CSV dont les noms correspondent à "data_0" suivi de 1 ou 2, puis ".csv".
Sortie :
data_01.csv data_02.csv
Lister les Fichiers Cachés
En Linux, les fichiers commençant par un point (.) sont des fichiers cachés. Nous pouvons également utiliser des jokers pour les trouver :
ls .*
La sortie inclura :
. .. .hidden_file1 .hidden_file2
Remarque : Les . et .. représentent respectivement le répertoire actuel et le répertoire parent.
Essayez ces commandes et observez les résultats. Comprendre ces jokers de base est essentiel avant de passer à leur utilisation pour les opérations de copie de fichiers.
Copier des Fichiers en Utilisant les Jokers
Maintenant que vous comprenez les jokers de base, utilisons-les pour copier des fichiers efficacement. La syntaxe générale pour copier des fichiers est :
cp [options] source_file(s) destination
Créons quelques répertoires d'organisation et entraînons-nous à copier des fichiers avec différents motifs.
Copier Tous les Fichiers avec une Extension Spécifique
Copions tous les fichiers texte dans le répertoire de sauvegarde :
cd ~/project/wildcards_lab
cp *.txt backup/
Cette commande copie tous les fichiers se terminant par .txt dans le répertoire de sauvegarde. Vérifions :
ls backup/
Vous devriez voir :
file1.txt file2.txt file3.txt report1.txt report2.txt report_final.txt
Copier les Fichiers Commençant par des Motifs Spécifiques
Ensuite, copions tous les fichiers image dans le répertoire images :
cp image*.jpg images/
Cela copie tous les fichiers commençant par "image" et se terminant par ".jpg" dans le répertoire images. Vérifions :
ls images/
Sortie :
image1.jpg image2.jpg image3.jpg
Copier des Fichiers avec Plusieurs Motifs en Utilisant l'Expansion de Parenthèses
L'expansion de parenthèses {pattern1,pattern2} vous permet de spécifier plusieurs motifs. Copions les fichiers PDF et CSV dans le répertoire documents :
cp *.{pdf,csv} documents/
Cette commande copie tous les fichiers se terminant par .pdf ou .csv dans le répertoire documents. Vérifions :
ls documents/
Sortie :
data_01.csv data_02.csv data_03.csv doc1.pdf doc2.pdf
Copier des Fichiers avec Plusieurs Motifs en utilisant l'opérateur OU (||)
Nous pouvons également utiliser l'opérateur || pour copier des fichiers correspondant à différents motifs :
cp report*.txt script.sh backup/
Cela copie tous les fichiers commençant par "report" et se terminant par ".txt", ainsi que le fichier script.sh, dans le répertoire de sauvegarde. Vérifions ce qu'il y a dans le répertoire de sauvegarde maintenant :
ls backup/
Sortie mise à jour :
file1.txt file2.txt file3.txt report1.txt report2.txt report_final.txt script.sh
Copier des Fichiers Tout en Préservant les Attributs
Lors de la copie de fichiers, vous souhaiterez peut-être conserver des attributs tels que les horodatages et les permissions. Utilisez l'option -p :
cp -p config.yml backup/
Pour vérifier que les attributs ont été conservés :
ls -l config.yml
ls -l backup/config.yml
Les horodatages et les permissions devraient être identiques pour les deux fichiers.
Essayez d'expérimenter avec ces commandes et explorez comment différents motifs de jokers vous aident à copier des fichiers efficacement.
Techniques Avancées de Jokers
Maintenant que vous maîtrisez les bases, explorons des motifs de jokers plus avancés pour effectuer des opérations sur les fichiers plus spécifiques.
Création d'un Nouveau Répertoire pour les Opérations Avancées
Tout d'abord, créons un nouveau répertoire pour pratiquer les techniques avancées :
cd ~/project/wildcards_lab
mkdir advanced
Utilisation des Classes de Caractères avec les Crochets
Les classes de caractères vous permettent de faire correspondre un seul caractère d'un ensemble de caractères :
## Copier les fichiers qui commencent par 'd' ou 'f'
cp [df]*.* advanced/
Cela copie tous les fichiers commençant par 'd' ou 'f' dans le répertoire advanced. Vérifions :
ls advanced/
Sortie :
data_01.csv data_02.csv data_03.csv doc1.pdf doc2.pdf file1.txt file2.txt file3.txt
Utilisation de la Négation dans les Classes de Caractères
Vous pouvez utiliser le symbole ! ou ^ après le crochet ouvrant pour nier la classe de caractères. Copions les fichiers qui ne commencent pas par 'r' ou 'i' :
mkdir advanced/filtered
cp [^ri]*.txt advanced/filtered/
Vérifions :
ls advanced/filtered/
Sortie :
file1.txt file2.txt file3.txt
Combinaison de Plusieurs Jokers
Combinons différents jokers pour créer des motifs plus spécifiques :
## Copier les fichiers qui commencent par 'data_0', suivis d'un seul chiffre, et se terminent par '.csv'
cp data_0?.csv advanced/
Vérifions que cela a correctement copié nos fichiers CSV :
ls advanced/*.csv
Sortie :
advanced/data_01.csv advanced/data_02.csv advanced/data_03.csv
Utilisation du Globbing Étendu
Bash fournit des motifs de globbing étendus, qui sont plus puissants que les jokers standards. Tout d'abord, activez le globbing étendu :
shopt -s extglob
Maintenant, nous pouvons utiliser des motifs comme :
?(pattern): Correspond à zéro ou une occurrence du motif*(pattern): Correspond à zéro ou plusieurs occurrences+(pattern): Correspond à une ou plusieurs occurrences@(pattern): Correspond exactement à une occurrence!(pattern): Correspond à tout sauf le motif
Essayons un exemple :
## Copier les fichiers qui ont un nombre suivi de .txt
mkdir advanced/numbered
cp +([0-9])*.txt advanced/numbered/
Le résultat pourrait être vide puisque nos fichiers originaux ne correspondent pas à ce motif exact. Créons un fichier qui correspond :
touch 123file.txt
cp +([0-9])*.txt advanced/numbered/
ls advanced/numbered/
Sortie :
123file.txt
Utilisation de l'Expansion de Parenthèses pour des Motifs Complexes
L'expansion de parenthèses est utile pour créer des motifs complexes :
## Créer un répertoire pour les fichiers de rapport
mkdir advanced/reports
## Copier tous les fichiers de rapport et les fichiers de configuration
cp {report*.txt,*.yml} advanced/reports/
Vérifions :
ls advanced/reports/
Sortie :
config.yml report1.txt report2.txt report_final.txt
Ces techniques avancées vous aideront à être plus précis lors de la sélection des fichiers, ce qui vous fera gagner du temps et des efforts dans la gestion de votre système de fichiers. Essayez d'expérimenter avec des combinaisons de ces jokers pour voir comment ils peuvent vous aider à gérer les fichiers plus efficacement.
Exercice Pratique de Gestion de Fichiers
Dans cette dernière étape, nous allons rassembler tout ce que nous avons appris pour résoudre un problème pratique de gestion de fichiers. Cet exercice renforcera votre compréhension des jokers et démontrera leur application pratique.
Scénario
Imaginez que vous êtes un administrateur système responsable de l'organisation d'un répertoire contenant différents types de fichiers. Vous devez :
- Identifier et catégoriser les fichiers par type
- Effectuer une sauvegarde des fichiers importants
- Extraire les fichiers en fonction de modèles de nommage spécifiques
Simulons ce scénario :
Création d'un Répertoire de Projet Simulé
Tout d'abord, créons un nouveau répertoire de projet avec différents types de fichiers :
cd ~/project/wildcards_lab
mkdir project_files
cd project_files
## Créer différents types de fichiers
touch project_doc_v1.txt project_doc_v2.txt project_doc_final.txt
touch data_2023_01.csv data_2023_02.csv data_2023_03.csv
touch config_dev.yml config_test.yml config_prod.yml
touch backup_script_v1.sh backup_script_v2.sh
touch image001.png image002.png image003.png
touch .project_config .project_log
Vérifions notre répertoire :
ls
Sortie :
backup_script_v1.sh config_prod.yml data_2023_02.csv image002.png project_doc_v1.txt
backup_script_v2.sh config_test.yml data_2023_03.csv image003.png project_doc_v2.txt
config_dev.yml data_2023_01.csv image001.png project_doc_final.txt
Remarque : Les fichiers cachés (commençant par .) n'apparaîtront pas dans la sortie ls de base.
Organisation des Fichiers par Type
Maintenant, créons des répertoires pour différents types de fichiers et organisons nos fichiers :
## Créer des répertoires
mkdir docs configs scripts data images backups
## Copier les documents texte dans le répertoire docs
cp *doc*.txt docs/
## Copier les fichiers de configuration dans le répertoire configs
cp *.yml configs/
## Copier les scripts dans le répertoire scripts
cp *.sh scripts/
## Copier les fichiers de données dans le répertoire data
cp *.csv data/
## Copier les images dans le répertoire images
cp *.png images/
Vérifions notre organisation :
echo "Documents:"
ls docs/
echo "Configurations:"
ls configs/
echo "Scripts:"
ls scripts/
echo "Fichiers de données:"
ls data/
echo "Images:"
ls images/
Sortie :
Documents:
project_doc_final.txt project_doc_v1.txt project_doc_v2.txt
Configurations:
config_dev.yml config_prod.yml config_test.yml
Scripts:
backup_script_v1.sh backup_script_v2.sh
Fichiers de données:
data_2023_01.csv data_2023_02.csv data_2023_03.csv
Images:
image001.png image002.png image003.png
Création d'une Sauvegarde Complète
Créons une sauvegarde complète qui inclut tous les fichiers importants :
## Créer une sauvegarde de tous les fichiers autres que les images
cp !(*.png|*backup*) backups/
## Voyons ce qu'il y a dans notre répertoire de sauvegardes
ls backups/
Sortie :
config_dev.yml config_test.yml data_2023_01.csv data_2023_03.csv project_doc_final.txt project_doc_v2.txt
config_prod.yml data_2023_02.csv project_doc_v1.txt
Recherche de Fichiers avec des Motifs Spécifiques
Maintenant, recherchons les fichiers qui correspondent à des motifs spécifiques :
## Trouver tous les fichiers de 2023
echo "Fichiers de 2023:"
ls *2023*
## Trouver toutes les versions finales ou de production
echo "Versions Finales/Production:"
ls *final* *prod*
## Trouver tous les fichiers de la version 2
echo "Fichiers de la version 2:"
ls *v2*
Sortie :
Fichiers de 2023:
data_2023_01.csv data_2023_02.csv data_2023_03.csv
Versions Finales/Production:
config_prod.yml project_doc_final.txt
Fichiers de la version 2:
backup_script_v2.sh project_doc_v2.txt
Application Pratique : Création d'un Package de Déploiement
Enfin, créons un package de déploiement contenant uniquement les configurations de production et la documentation finale :
mkdir deployment_package
cp *prod*.yml *final*.txt deployment_package/
## Vérifier notre package de déploiement
ls deployment_package/
Sortie :
config_prod.yml project_doc_final.txt
Félicitations ! Vous avez réussi à effectuer un exercice pratique de gestion de fichiers en utilisant les jokers Linux. Ces compétences seront inestimables pour gérer efficacement les fichiers dans un environnement Linux, automatiser les tâches répétitives et organiser votre système de fichiers de manière efficace.
Résumé
Dans ce laboratoire, vous avez appris à utiliser efficacement les jokers Linux pour copier et gérer des fichiers avec des motifs spécifiques. Vous avez commencé avec des jokers de base comme l'astérisque (*), le point d'interrogation (?), et les crochets ([]), puis vous avez progressé vers des techniques plus avancées telles que les classes de caractères, la négation et le globbing étendu.
Voici les compétences clés que vous avez acquises :
- Utilisation des jokers de base (*,?,[ ]) pour faire correspondre des motifs de fichiers
- Copie de fichiers avec des extensions spécifiques ou des motifs de nommage
- Utilisation de techniques de jokers avancées pour une sélection de fichiers plus précise
- Combinaison de plusieurs jokers et expansion de parenthèses pour des motifs complexes
- Application de ces compétences pour organiser et gérer des fichiers dans un scénario pratique
Ces compétences amélioreront considérablement votre productivité lorsque vous travaillez avec la ligne de commande Linux, vous permettant d'automatiser les tâches de gestion de fichiers et d'organiser efficacement votre système de fichiers. Au fur et à mesure que vous continuerez à travailler avec Linux, ces techniques de jokers deviendront des outils inestimables dans vos opérations quotidiennes.
Rappelez-vous que la pratique rend parfait. Plus vous utiliserez ces jokers dans votre travail quotidien, plus vous deviendrez à l'aise et compétent avec eux.



