Quiero obtener solo el nombre del directorio principal para un archivo.
Ejemplo: cuando tengo path=/a/b/c/d/file
, solo quiero d
y no /a/b/c/d
(que obtengo dirname $path
) como salida.
¿Hay alguna forma sofisticada de hacer esto?
Parece que quieres el nombre base del nombre del directorio:
$ filepath=/a/b/c/d/file
$ parentname="$(basename "$(dirname "$filepath")")"
$ echo "$parentname"
d
dirname
comando asumirá que está en el directorio actual (también conocido como ".").parentname="$(basename "$(dirname "$pwd")")"
PWD
deben escribirse en mayúscula Tratarparentname="$(basename "$(dirname "$PWD")")"
.Puede usar pwd para obtener el directorio de trabajo actual y usar la expansión de parámetros para evitar bifurcarlo en otro (sub) shell.
Editar: fuente probada
fuente
${path##*/}
Creo que esta es una solución con menos recursos:
editar: Lo sentimos, la expansión anidada no es posible en bash, pero funciona en zsh. Versión Bash:
fuente
filepath=file
o filepath = / file`.foofile
? Si no está completa, la ruta no se puede saber (tal vez sifoofile
es un archivo existente, no solo una "cadena").En bash, en una línea:
fuente
Me gusta más la respuesta de Julian67, pero aquí hay una versión un poco ampliada:
fuente