Obtém o diretório pai para um arquivo

18

Eu quero apenas o nome do diretório pai para um arquivo.

Exemplo: quando eu tenho path=/a/b/c/d/file , quero apenas d e não /a/b/c/d (que eu recebo de dirname $path ) como saída.

Existe alguma maneira sofisticada de fazer isso?

    
por shraddha 20.01.2013 / 07:02

5 respostas

20

Parece que você quer o nome de base de o nome do dir:

$ filepath=/a/b/c/d/file
$ parentname="$(basename "$(dirname "$filepath")")"
$ echo "$parentname"
d
    
por 20.01.2013 / 08:11
4

Você pode usar o pwd para obter o diretório de trabalho atual e usar a expansão de parâmetro para evitar bifurcá-lo em outra (sub) casca.

echo ${PWD##*/}

Editar: fonte comprovada

    
por 20.01.2013 / 10:06
1

Acho que esta é uma solução com menos recursos:

 $ filepath=/a/b/c/d/file
 $ echo ${${filepath%/*}##*/}
 d

edit: Desculpe, a expansão aninhada não é possível no bash, mas funciona em zsh. Versão do Bash:

 $ filepath=/a/b/c/d/file
 $ path=${filepath%/*}
 $ echo ${path##*/}
 d
    
por 20.01.2013 / 11:05
1

No bash, em uma linha:

$ dirname /a/b/c/d/file | sed 's,^\(.*/\)\?\([^/]*\),,'
    
por 28.04.2013 / 19:34
0

Eu gosto mais da resposta de Julian67, mas aqui está um pouco uma versão expandida:

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"
    
por 29.10.2018 / 14:31