Commande basename Linux

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

  1. Path(Obligatoire) : la chaîne de chemin complète à traiter
  2. 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

$ basename /home/user/documents/report.txt
report.txt

Exemple 2 : supprimer l'extension de fichier

Exemple

$ basename /home/user/documents/report.txt .txt
report

Exemple 3 : traiter plusieurs fichiers (en utilisant l'option -a)

Exemple

$ basename -a /chemin/vers/file1.txt /un autre/chemin/file2.log
file1.txt
file2.log

Scénarios d'application pratiques

Scénario 1 : Traitement par lots des extensions de fichiers

Exemple

for file in *.jpg; do
    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

#!/bin/bash
SCRIPT_NAME=$(basename "$0")
echo "Exécution du script :$SCRIPT_NAME"

Scénario 3 : Combinaison avec la commande find

Exemple

find /var/log - "*.log" -exec basename {} \;

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 :

  1. 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"
  2. Utilisation de variables sans guillemets dans les scripts

    • Incorrect:basename $filepath
    • Correct:basename "$filepath"

Astuces avancées

Astuce 1 : Gestion de plusieurs suffixes

Exemple

$ basename archive.tar.gz .gz
archive.tar
$ basename archive.tar.gz .tar.gz
archive

Astuce 2 : Utilisation dans un pipeline

Exemple

echo "/usr/local/bin/python" | xargs basename

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

path="/home/user/file.txt"
filename="${path##*/}"  # Équivalent à basename
echo "$filename"

Linux 命令大全Référence complète des commandes Linux

Autres extensions