Objectifs
- Distinguer un chemin absolu d’un chemin relatif.
- Utiliser les raccourcis de navigation essentiels :
.,..et~. - Sélectionner des groupes de fichiers avec les jokers (globbing) :
*,?,[]. - Générer des chaînes de caractères avec l’expansion des accolades
{}.
Explications détaillées
Notions clés
Chemins Absolus vs Relatifs
C’est la notion la plus fondamentale pour se repérer.
- Chemin Absolu : C’est une adresse complète qui commence toujours à la racine du système de fichiers (
/). Peu importe où vous êtes, ce chemin pointera toujours vers le même endroit.- Exemple :
/home/user/documents/rapport.txt
- Exemple :
- Chemin Relatif : C’est une adresse qui dépend de votre position actuelle (
pwd). Il ne commence pas par un/.- Exemple : Si vous êtes dans
/home/user, le chemin relatifdocuments/rapport.txtpointe vers le même fichier.
- Exemple : Si vous êtes dans
Raccourcis de Navigation
.: Représente le répertoire courant. Utile pour exécuter des scripts :./mon_script.sh...: Représente le répertoire parent (celui juste au-dessus).~: Représente votre dossier personnel (ex:/home/votre_nom).
Globbing : Sélectionner avec des Jokers
Le globbing permet de créer des motifs pour sélectionner plusieurs fichiers à la fois.
*(astérisque) : Remplace n’importe quelle chaîne de caractères (y compris une chaîne vide).*.log: tous les fichiers se terminant par.log.rapport_*: tous les fichiers commençant parrapport_.
?(point d’interrogation) : Remplace un seul caractère, ni plus, ni moins.photo_0?.jpg: correspond àphoto_01.jpg,photo_02.jpg, mais pasphoto_10.jpg.
[](crochets) : Remplace un des caractères listés à l’intérieur.[abc].txt: correspond àa.txt,b.txt, etc.txt.[0-9].log: correspond à0.log,1.log, …,9.log.
Expansions
Bash remplace certaines expressions avant d’exécuter la commande.
- Expansion du tilde
~:cd ~/Documentsest remplacé parcd /home/user/Documents. - Expansion des accolades
{}: Génère toutes les combinaisons possibles.echo image_{1,2,3}.jpg→image_1.jpg image_2.jpg image_3.jpgmkdir -p projet/{src,docs,tests}→ crée les 3 sous-dossiers d’un coup.
Syntaxe / Usages
# Aller à la racine du système
cd /
# Lister le contenu du dossier parent
ls ..
# Lister tous les fichiers Python (.py)
ls *.py
# Copier tous les fichiers JPG et PNG dans un autre dossier
cp *.{jpg,png} ./backup/
# Créer des fichiers de test rapidement
touch test_{a..d}.txt
# Crée test_a.txt, test_b.txt, test_c.txt, test_d.txt
Exemples
# Créons une petite arborescence pour tester
mkdir -p demo_chemins/images demo_chemins/rapports
# Allons dans le nouveau dossier
cd demo_chemins
# Créons des fichiers
touch rapports/rapport_2024.txt rapports/rapport_2025.txt
touch images/photo_01.jpg images/photo_02.png images/logo.svg
# Depuis le dossier 'demo_chemins', listons les images
# Chemin relatif
ls images/
# Listons tous les fichiers .txt du projet, où que nous soyons
# Chemin absolu (adaptez avec votre sortie de `pwd`)
ls /home/devops/projects/data.pm/demo_chemins/rapports/*.txt
# Listons uniquement les photos (pas les autres images)
ls images/photo_*.jpg
# Supprimons tous les rapports
# rm rapports/rapport*
Bonnes pratiques
- Citez vos chemins : Si un chemin peut contenir des espaces, mettez-le toujours entre guillemets :
ls "mon dossier/". - Utilisez
findpour des recherches complexes : Le globbing est simple, maisfindest beaucoup plus puissant pour chercher récursivement avec des critères complexes (taille, date, etc.). - Combinez les expansions pour être plus efficace.
mkdir -p projet_{A,B}/src/{main,test}est une commande très puissante.
Pièges courants
*inattendu :rm *dans un dossier vide ne fait rien, mais s’il est plein, il peut être destructeur. Soyez toujours sûr de votrepwdavant d’utiliser*avec des commandes commerm.- Le globbing échoue si rien ne correspond : Par défaut, si
ls *.xyzne trouve aucun fichier, Bash passera la chaîne littérale*.xyzà la commandels, qui affichera une erreur. - Les fichiers cachés : Par défaut,
*n’inclut pas les fichiers cachés (ceux qui commencent par un.). Pour les inclure, il faut souvent ajuster la configuration du shell ou utiliser des motifs plus explicites.
Exercices
-
Arborescence et Navigation :
- Créez l’arborescence suivante en une seule commande :
projet/, avec les sous-dossiersdata/raw,data/processed, etscripts. - Depuis
projet/, créez un fichierscripts/process.sh. - Depuis
projet/scripts/, copiez ce fichier dansdata/raw/en utilisant un chemin relatif.
- Créez l’arborescence suivante en une seule commande :
-
Sélection par globbing :
- Dans un nouveau dossier, créez les fichiers
log_2025-01.txt,log_2025-02.txt,report.pdf,log_2024-12.txt. - Écrivez une seule commande
lsqui n’affiche que les logs de 2025. - Écrivez une seule commande
rmpour supprimer tous les fichiers de log.
- Dans un nouveau dossier, créez les fichiers
-
Script de création :
- Écrivez un script
init_month.shqui prend un nom de mois en argument (ex:janvier) et crée un dossierjanvier/avec à l’intérieur les sous-dossierssemaine_{1..4}. - Exécutez
./init_month.sh fevrierpour tester.
- Écrivez un script