GNU/Linux >> Tutoriels Linux >  >> Linux

Extraire le nom de base du fichier sans chemin ni extension dans bash

La commande basename a deux invocations différentes; dans l'un, vous spécifiez uniquement le chemin, auquel cas il vous donne le dernier composant, tandis que dans l'autre, vous donnez également un suffixe qu'il supprimera. Ainsi, vous pouvez simplifier votre exemple de code en utilisant la deuxième invocation de basename. Faites également attention à bien citer les choses :

fbname=$(basename "$1" .txt)
echo "$fbname"

Voici les oneliners :

  1. $(basename "${s%.*}")
  2. $(basename "${s}" ".${s##*.}")

J'avais besoin de ça, comme demandé par bongbang et w4etwetewtwet.


Vous n'avez pas besoin d'appeler le basename externe commande. À la place, vous pouvez utiliser les commandes suivantes :

$ s=/the/path/foo.txt
$ echo "${s##*/}"
foo.txt
$ s=${s##*/}
$ echo "${s%.txt}"
foo
$ echo "${s%.*}"
foo

Notez que cette solution devrait fonctionner dans toutes les versions récentes (post 2004 ) POSIX coques conformes, (par exemple bash , dash , ksh , etc.).

Source :Shell Command Language 2.6.2 Extension des paramètres

En savoir plus sur les manipulations de chaînes bash :http://tldp.org/LDP/LG/issue18/bash.html


Une combinaison de nom de base et de coupe fonctionne bien, même en cas de double fin comme .tar.gz :

fbname=$(basename "$fullfile" | cut -d. -f1)

Ce serait intéressant si cette solution nécessitait moins de puissance arithmétique que l'expansion des paramètres de Bash.


Linux
  1. Comment extraire les fichiers .gz et .tar.gz sous Linux

  2. Comment masquer des fichiers et des dossiers dans le gestionnaire de fichiers sans les renommer

  3. Vue complète de l'endroit où la variable de chemin est définie dans Bash ?

  4. Comment normaliser un chemin de fichier dans Bash ?

  5. grep sans afficher le chemin/fichier :ligne

Comprendre les chemins de fichiers et comment les utiliser sous Linux

Comment utiliser ISPConfig et Seafile sans modifications manuelles des fichiers

Une fonction bash pour extraire des archives de fichiers de différents types

Commande Linux tar pour compresser et extraire des fichiers

bash :redirige stderr vers le fichier et stdout + stderr vers l'écran

complétion du fichier bash sans spécifier ./