Comment copier des fichiers avec des motifs spécifiques en utilisant les jokers sous Linux

LinuxBeginner
Pratiquer maintenant

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 :

  1. Identifier et catégoriser les fichiers par type
  2. Effectuer une sauvegarde des fichiers importants
  3. 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 :

  1. Utilisation des jokers de base (*,?,[ ]) pour faire correspondre des motifs de fichiers
  2. Copie de fichiers avec des extensions spécifiques ou des motifs de nommage
  3. Utilisation de techniques de jokers avancées pour une sélection de fichiers plus précise
  4. Combinaison de plusieurs jokers et expansion de parenthèses pour des motifs complexes
  5. 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.