Commande basename Linux
Référence complète des commandes Linux
Qu'est-ce que la commande basename
basenameC'est un outil en ligne de commande simple mais pratique dans les systèmes Linux, utilisé pour extraire la partie nom de fichier d'un chemin de fichier. C'est comme un analyseur de chemin qui supprime les informations de répertoire et ne conserve que le nom de fichier final.
Analogie: Imaginez que vous avez une adresse postale complète (comme "Chine/Pékin/District de Haidian/Rue Zhongguancun n° 1"),basenamela fonction de basename est d'extraire uniquement la dernière partie "Rue Zhongguancun n° 1".
Syntaxe de base de la commande basename
basename [选项] 路径 [后缀]
Description des paramètres
- Path(Obligatoire) : la chaîne de chemin complète à traiter
- Suffix(Facultatif) : s'il est spécifié, ce suffixe sera supprimé du résultat
Options courantes
| Option | Description |
|---|---|
-a |
Prend en charge plusieurs chemins comme arguments |
-s 后缀 |
Supprime le suffixe spécifié (équivalent à ajouter le paramètre suffix à la fin de la commande) |
-z |
Sépare les résultats de sortie par des caractères nuls (au lieu de retours à la ligne) |
Exemples d'utilisation de base
Exemple 1 : extraction de base d'un nom de fichier
Exemple
report.txt
Exemple 2 : supprimer l'extension de fichier
Exemple
report
Exemple 3 : traiter plusieurs fichiers (en utilisant l'option -a)
Exemple
file1.txt
file2.log
Scénarios d'application pratiques
Scénario 1 : Traitement par lots des extensions de fichiers
Exemple
mv "$file" "$(basename "$file" .jpg).png"
done
Explication: Ce script renomme tous les fichiers .jpg du répertoire courant en fichiers .png, en changeant uniquement l'extension tout en conservant le nom de fichier d'origine.
Scénario 2 : Obtenir le nom du script courant dans un script
Exemple
SCRIPT_NAME=$(basename "$0")
echo "Exécution du script :$SCRIPT_NAME"
Scénario 3 : Combinaison avec la commande find
Exemple
Objectif: Trouver tous les fichiers .log dans le répertoire /var/log et uniquement les noms de fichiers (chemins)
FAQ
Q1 : Quelle est la différence entre basename et dirname ?
| Commande | Fonction | Exemple d'entrée | Exemple de sortie |
|---|---|---|---|
basename |
Extraire la dernière partie du chemin | /a/b/c.txt | c.txt |
dirname |
Extraire la partie répertoire | /a/b/c.txt | /a/b |
Q2 : Pourquoi ma commande basename ne fonctionne-t-elle pas ?
Raisons courantes :
Le chemin contient des caractères spéciaux (tels que des espaces) mais n'est pas entre guillemets
- Incorrect:
basename /path/with spaces/file - Correct:
basename "/path/with spaces/file"
- Incorrect:
Utilisation de variables sans guillemets dans les scripts
- Incorrect:
basename $filepath - Correct:
basename "$filepath"
- Incorrect:
Astuces avancées
Astuce 1 : Gestion de plusieurs suffixes
Exemple
archive.tar
$ basename archive.tar.gz .tar.gz
archive
Astuce 2 : Utilisation dans un pipeline
Exemple
Sortie :python
Astuce 3 : Alternative utilisant l'expansion de paramètres
Dans Bash, vous pouvez également utiliser l'expansion de paramètres pour obtenir une fonctionnalité similaire :
Exemple
filename="${path##*/}" # Équivalent à basename
echo "$filename"
Autres extensions