web-dev-qa-db-fra.com

Récupère le répertoire parent d'un fichier

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?

20
shraddha

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
23
Gordon Davisson

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

5
fire

En bash, en une ligne:

$ dirname /a/b/c/d/file | sed 's,^\(.*/\)\?\([^/]*\),\2,'
1
julian67

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
1
uzsolt

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"
0