La commande basename sous Linux imprime le composant final dans un chemin de fichier. Ceci est particulièrement utile dans les scripts bash où vous souhaitez extraire le nom de fichier du chemin de fichier long.
Laissez-moi vous le montrer avec quelques exemples.
Commande de nom de base
La commande basename a deux types de syntaxe. Le premier implique un suffixe :
basename PATH [suffix]
La seconde permet d'ajouter des options :
basename OPTION PATH
Vous ne pouvez pas combiner les options avec le suffixe. Ne soyez pas encore confus. Suivez les exemples et vous comprendrez ce que je veux dire.
L'utilisation de la commande basename avec un chemin de fichier donnera le nom du fichier :
basename /home/user/data/filename.txt
filename.txt
La commande basename est assez stupide en fait. Il ne reconnaît pas vraiment le chemin du fichier. Il recherche simplement les barres obliques (/) et imprime ce qui se trouve après la dernière barre oblique.
Par exemple, si j'exécute l'exemple ci-dessus en supprimant le nom du fichier, voici ce que cela donnera.
basename /home/user/data
data
Supprimer l'extension de fichier avec suffixe
L'utilisation principale de la commande bash consiste à extraire le nom du fichier du chemin du fichier. Vous pouvez également supprimer l'extension de fichier lors de l'extraction du nom de fichier.
Mentionnez simplement ce que vous souhaitez supprimer à la fin de la sortie. Supposons donc que vous souhaitiez supprimer le .txt de filename.txt. Ajoutez-le simplement à la fin de la commande basename :
basename /home/user/data/filename.txt .txt
filename
Vous pouvez également utiliser l'option -s pour le suffixe :
basename -s .txt /home/user/data/filename.txt
filename
Le suffixe est supprimé à la fin du composant final de l'entrée. Il ne comprend pas vraiment l'extension du fichier. Si vous fournissez txt (sans le point) au lieu de .txt, vous obtiendrez "nom de fichier". (avec le point à la fin).
De plus, si vous fournissez un suffixe qui n'est pas à la fin du composant, la sortie reste comme s'il n'y avait pas de suffixe.
basename /home/user/data/filename.txt name
filename.txt
Utiliser le nom de base avec plusieurs chemins
Avec l'option -a
, vous pouvez utiliser plusieurs chemins simultanément.
basename -a /home/user/data/filename1.txt /home/user/data/filename2.txt
filename1.txt
filename2.txt
Vous pouvez utiliser l'option de suffixe -s
avec -a
mais avec quelques limites. Vous ne pouvez fournir qu'un seul suffixe pour tous les chemins de fichiers.
basename -as .txt /home/user/data/filename1.txt /home/user/data/filename2.txt
filename1
filename2
Vous ne pouvez pas attribuer des suffixes individuels. Cela ne fonctionnera pas.
Vous pouvez également séparer la sortie avec NULL au lieu de la nouvelle ligne avec -z
option.
Utilisation du nom de base dans le script bash
J'ai montré quelques exemples de la commande basename. Voyons quelques exemples de nom de base dans les scripts bash.
Supposons que vous ayez une variable de chemin de fichier et que vous souhaitiez stocker le nom de fichier à partir du chemin dans une variable. Il peut s'agir d'un simple script :
pathname="/home/dir/data/filename"
result=$(basename "$pathname")
echo $result
Un autre exemple est celui où vous souhaitez renommer les extensions de fichier. Bien sûr, vous pouvez utiliser la commande rename pour renommer des fichiers par lots, mais ce n'est qu'un exemple.
J'ai donc écrit cet exemple de script dans le but de remplacer les extensions de fichier :
for file in *$1; do
if [ -f $file ]; then
mv $file `basename $file .$1`.$2
fi
done
Avez-vous remarqué que j'ai mis une vérification s'il s'agit d'un fichier ou non dans le script bash afin qu'il ne modifie pas un répertoire correspondant ?
Vous pouvez utiliser le script ci-dessus comme ceci :
./myscript.sh html htm
Et il renommera tous les fichiers du répertoire courant avec html à la fin en htm.
Ce ne sont là que quelques exemples. Vous pouvez l'utiliser selon vos besoins.
La commande basename est complétée par la commande dirname. Contrairement à basename, la commande dirname imprime tout le chemin sauf le dernier composant.
J'espère que ce tutoriel vous a plu. Comme toujours, n'hésitez pas à poser des questions ou à faire des suggestions dans la section des commentaires.