Quero obter apenas o nome do diretório pai de um arquivo.
Exemplo: quando tenho path=/a/b/c/d/file
, quero apenas d
e não /a/b/c/d
(do qual recebo dirname $path
) como saída.
Existe alguma maneira sofisticada de fazer isso?
Parece que você deseja o nome de base do dirname:
$ filepath=/a/b/c/d/file
$ parentname="$(basename "$(dirname "$filepath")")"
$ echo "$parentname"
d
dirname
comando assumirá que está no diretório atual (também conhecido como ".").parentname="$(basename "$(dirname "$pwd")")"
PWD
devem ser capitalizadas. Tenteparentname="$(basename "$(dirname "$PWD")")"
.Você pode usar o pwd para obter o diretório de trabalho atual e usar a expansão de parâmetros para evitar bifurcá-lo em outro (sub) shell.
Edit: fonte comprovada
fonte
${path##*/}
Eu acho que essa é uma solução com menos recursos:
edit: Desculpe, a expansão aninhada não é possível no bash, mas funciona no zsh. Versão Bash:
fonte
filepath=file
ou filepath = / file`.foofile
? Se não for o caminho completo, não será possível saber (talvez sefoofile
um arquivo existente não seja apenas uma "string").No bash, em uma linha:
fonte
Eu gosto da resposta de Julian67 acima, mas aqui está uma versão expandida:
fonte