Parfois, lorsque vous travaillez sur la ligne de commande (en particulier lorsque vous traitez avec des scripts shell), vous pouvez être intéressé uniquement par le nom de fichier, mais ce qui vous est disponible est le chemin complet du fichier. Ainsi, l'exigence est de supprimer le composant de répertoire du chemin. Vous serez heureux de savoir qu'il existe une commande - basename - qui fait ce travail.
Dans ce didacticiel, nous aborderons les bases de 'basename' à l'aide d'exemples faciles à comprendre. Mais avant de passer à cela, il convient de mentionner que tous les exemples ici ont été testés sur une machine Ubuntu 16.04 LTS.
Commande nom de base Linux
La commande basename vous permet de supprimer les composants des noms de fichiers qui ne sont pas nécessaires. Voici la syntaxe de l'outil :
basename NAME [SUFFIX]
basename OPTION... NAME...
Et voici ce que dit la page de manuel :
basename - strip directory and suffix from filenamesfinal.
Print NAME with any leading directory components removed. If specified, also remove a trailing
SUFFIX.
Voici quelques exemples de style Q&A qui devraient vous donner une bonne idée du fonctionnement de la commande basename.
Q1. Comment fonctionne la commande basename ?
Par défaut, si vous exécutez la commande 'basename' avec un chemin complet vers un fichier en entrée, la commande renvoie le nom du fichier en sortie. Par exemple, lorsque j'ai exécuté la commande suivante :
basename /home/himanshu/Downloads/analytics.pdf
J'ai obtenu le résultat suivant :
analytics.pdf
Q2. Basename peut-il gérer plusieurs entrées ?
Oui il peut. Mais pour que cela se produise, vous devez utiliser l'option de ligne de commande -a. Par exemple, lorsque j'ai exécuté la commande suivante :
basename -a /home/himanshu/Downloads/analytics.pdf /home/himanshu/Pictures/test.png
Et voici le résultat que j'ai :
analytics.pdf
test.png
Q3. Comment créer également une extension de fichier de bande de nom de base ?
Parfois, vous voudrez peut-être uniquement récupérer le nom du fichier, mais pas son extension. Eh bien, cela peut être fait en utilisant l'option de ligne de commande -s (qui vous oblige à passer le suffixe en entrée).
Par exemple, la commande suivante :
basename -s .pdf /home/himanshu/Downloads/analytics.pdf
a produit cette sortie :
analytics
Q4. Comment faire en sorte que chaque sortie de ligne se termine par NUL ?
Par défaut, le caractère de nouvelle ligne est utilisé comme séparateur dans la sortie. Cependant, si vous le souhaitez, vous pouvez forcer basename à utiliser NUL comme séparateur. Cela peut être fait en utilisant l'option de ligne de commande -z.
Par exemple :
basename -az /home/himanshu/Downloads/analytics.pdf /home/himanshu/Pictures/test.png
Et voici le résultat :
analytics.pdftest.png
Vous ne voyez donc pas le caractère NUL ici. Pour cela, vous devez rediriger la sortie vers un fichier, puis ouvrir le fichier dans un éditeur comme vim. Voici ce que vim a montré :
Conclusion
Comme vous pouvez le voir, basename n'est pas une commande très riche en fonctionnalités - les options qu'elle fournit sont limitées, et la plupart d'entre elles ont été discutées ici dans ce tutoriel. Une fois que vous avez fini de vous entraîner, rendez-vous sur la page de manuel de l'outil pour en savoir plus.