Je veux juste obtenir le nom du répertoire parent d'un fichier.
Exemple: lorsque j'ai path=/a/b/c/d/file
, je ne veux que d
et pas /a/b/c/d
(que je reçois de dirname $path
) en sortie.
Y a-t-il une manière sophistiquée de faire ceci?
On dirait que vous voulez le nom de base de le nom de répertoire:
$ filepath=/a/b/c/d/file
$ parentname="$(basename "$(dirname "$filepath")")"
$ echo "$parentname"
d
Vous pouvez utiliser pwd pour obtenir le répertoire de travail en cours et utiliser le paramètre de développement pour éviter de l'enregistrer dans un autre (sous) Shell.
echo ${PWD##*/}
Edit: source prouvée
En bash, en une ligne:
$ dirname /a/b/c/d/file | sed 's,^\(.*/\)\?\([^/]*\),\2,'
Je pense que ceci est une solution moins de ressources:
$ filepath=/a/b/c/d/file
$ echo ${${filepath%/*}##*/}
d
edit: Désolé, une expansion imbriquée n'est pas possible dans bash, mais cela fonctionne dans zsh. Bash-version:
$ filepath=/a/b/c/d/file
$ path=${filepath%/*}
$ echo ${path##*/}
d
J'aime la réponse de Julian67 ci-dessus, mais voici une version un peu plus développée:
file_path = "a/b/c/d/file.txt"
parent=$(echo $file_path | sed -e 's;\/[^/]*$;;') # cut away "/file.txt";'$' is end of string
parent=$(echo $parent | sed -e 's;.*\/;;') # cut away "/a/b/c/"
echo $parent # --> you get "d"