Risposte:
Sembra che tu voglia il nome di base del dirname:
$ filepath=/a/b/c/d/file
$ parentname="$(basename "$(dirname "$filepath")")"
$ echo "$parentname"
d
dirname
comando assumerà che si trovi nella directory corrente (aka ".").
parentname="$(basename "$(dirname "$pwd")")"
PWD
devono essere maiuscole. Prova parentname="$(basename "$(dirname "$PWD")")"
.
È possibile utilizzare pwd per ottenere la directory di lavoro corrente e utilizzare l' espansione dei parametri per evitare di inserirla in un'altra (sotto) shell.
echo ${PWD##*/}
Modifica: fonte comprovata
${path##*/}
Penso che questa sia una soluzione con meno risorse:
$ filepath=/a/b/c/d/file
$ echo ${${filepath%/*}##*/}
d
edit: Siamo spiacenti, l'espansione nidificata non è possibile in bash, ma funziona in zsh. Bash-Versione:
$ filepath=/a/b/c/d/file
$ path=${filepath%/*}
$ echo ${path##*/}
d
filepath=file
o filepath = / file`.
foofile
? Se non è il percorso completo non può saperlo (forse se foofile
un file esistente non è solo una "stringa").
In bash, in una riga:
$ dirname /a/b/c/d/file | sed 's,^\(.*/\)\?\([^/]*\),\2,'
Mi piace la risposta di Julian67 sopra, ma ecco una versione ampliata:
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"