Retour au cours

fichiers chemins

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
  • 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 relatif documents/rapport.txt pointe vers le même fichier.

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 par rapport_.
  • ? (point d’interrogation) : Remplace un seul caractère, ni plus, ni moins.
    • photo_0?.jpg : correspond à photo_01.jpg, photo_02.jpg, mais pas photo_10.jpg.
  • [] (crochets) : Remplace un des caractères listés à l’intérieur.
    • [abc].txt : correspond à a.txt, b.txt, et c.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 ~/Documents est remplacé par cd /home/user/Documents.
  • Expansion des accolades {} : Génère toutes les combinaisons possibles.
    • echo image_{1,2,3}.jpgimage_1.jpg image_2.jpg image_3.jpg
    • mkdir -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 find pour des recherches complexes : Le globbing est simple, mais find est 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 votre pwd avant d’utiliser * avec des commandes comme rm.
  • Le globbing échoue si rien ne correspond : Par défaut, si ls *.xyz ne trouve aucun fichier, Bash passera la chaîne littérale *.xyz à la commande ls, 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

  1. Arborescence et Navigation :

    • Créez l’arborescence suivante en une seule commande : projet/, avec les sous-dossiers data/raw, data/processed, et scripts.
    • Depuis projet/, créez un fichier scripts/process.sh.
    • Depuis projet/scripts/, copiez ce fichier dans data/raw/ en utilisant un chemin relatif.
  2. 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 ls qui n’affiche que les logs de 2025.
    • Écrivez une seule commande rm pour supprimer tous les fichiers de log.
  3. Script de création :

    • Écrivez un script init_month.sh qui prend un nom de mois en argument (ex: janvier) et crée un dossier janvier/ avec à l’intérieur les sous-dossiers semaine_{1..4}.
    • Exécutez ./init_month.sh fevrier pour tester.