Utiliser la commande basename dans les scripts Bash
Utilisation de la commande basename dans les scripts Bash
Dans le scripting Bash, l’une des tâches les plus courantes consiste à manipuler les chemins de fichiers, en particulier lorsque vous souhaitez extraire uniquement le nom du fichier à partir d’un chemin complet. C’est là que la commande basename entre en jeu. Bien que cela semble simple, basename a des cas d’utilisation puissants lorsqu’il est utilisé correctement dans des scripts plus complexes, des outils d’automatisation, services d’hébergement et des environnements CI/CD.
Qu’est-ce que basename ?
La commande basename supprime le chemin du répertoire et, en option, retire une extension de fichier, ne laissant que le nom de base (le dernier composant d’un chemin de fichier).
🔧 Syntaxe de base :
basename [path] [suffix]✅ Exemples simples :
basename /home/user/docs/report.pdf
basename /home/user/docs/report.pdf .pdf
Pourquoi utiliser basename dans les scripts ?
Voici quelques exemples de besoins de scripting dans le monde réel :
Journalisation : Extraire le nom d’un fichier journal en cours de traitement.
Archivage : Ajouter uniquement le nom de fichier à une archive compressée.
Automatisation : Traiter des lots de fichiers et générer des noms de fichiers de sortie.
Pipelines : Extraire des noms de fichiers dans les étapes CI/CD.
Cas d’utilisation pratiques dans les scripts Bash
📁 1. Boucle sur les fichiers avec journalisation
Ce script boucle sur les fichiers .log, extrait le nom sans extension et journalise chaque action. basename simplifie la gestion des noms de fichiers sans découpage complexe de chaînes.
📂 2. Utilisation de basename pour des chemins de fichiers dynamiques
Disons que vous recevez des chemins complets à partir de l’entrée utilisateur ou d’un autre processus :
#!/bin/bash
input_path="$1"
filename=$(basename "$input_path")
echo "The file name is: $filename"
Utiliser basename dans votre script garantit la flexibilité lors du travail avec des chemins de fichiers dynamiques, en particulier dans des environnements comme un VPS Linux où les journaux, les fichiers de configuration et les sauvegardes peuvent se trouver dans différents répertoires. Cela rend votre script robuste, qu’il reçoive un chemin complet comme /var/log/syslog ou un fichier relatif comme ./config.txt.
🧪 3. Combinaison de basename avec dirname
Utilisez-les ensemble pour isoler les éléments de chemin :
#!/bin/bash
path="/etc/nginx/nginx.conf"
echo "Directory: $(dirname "$path")"
echo "Filename: $(basename "$path")"Suppression des extensions de fichier avec basename
Si vous souhaitez supprimer des extensions connues :
⚠️ Remarque : Cela ne fonctionne que si le suffixe correspond exactement. Donc .txt fonctionne, mais .TXT ou .tar.gz ne fonctionneront pas à moins d’être spécifiés explicitement.
Pour plusieurs extensions, combinez basename avec d’autres outils :
file="/tmp/data/archive.tar.gz"
filename=$(basename "$file")
clean_name=${filename%%.*}
echo "$clean_name"
# Output: archiveOu :





