2012-05-18 8 views
17

Si escribe pwd se obtiene algo así como:Tome la última parte de la ruta de la carpeta en la cáscara

/home/username/Desctop/myfolder/

cómo tomar la última parte? La ruta myfolder.

Esto debe ser simple pero no pude encontrar una solución fácil en el shell. Sé cómo encargarme de esto en Java pero no en shell.

gracias

+0

No creo que sea correcto: la salida de 'pwd' does ** not ** contiene un seguimiento'/'. – Jens

Respuesta

16

tienes razón - es un comando rápido:

basename "$PWD" 
+1

Eso es al menos un tenedor caro inútil. ¿Qué hay de usar '$ PWD'? – Jens

0

Puede utilizar basename para que, siempre que la última parte es de hecho un componente de directorio (no un archivo):

$ basename /home/username/Desctop/myfolder/ 
myfolder 
0

Para extraer la parte final de un camino, trate de usar basename ...

basename $(pwd); 
2

En Linux, hay un par de comandos, dirname y basename. dirname extrae todos menos la última parte de una ruta, y basename extrae solo la última parte de una ruta.

En este caso, el uso de basename va a hacer lo que quiere:

basename $(pwd)

7

Usando basename $(pwd) son dos horquillas inútiles y costosas.

echo ${PWD##*/} 

debe hacer el truco por completo en la cáscara y sin horquillas caros (inconveniente: para el directorio raíz esta es la cadena vacía).

+1

Lo único es que el último '/' se elimina en 'basename' (puede no ser compatible con $ PWD, pero en otras rutas personalizadas puede ser así. De todos modos, elegiría este método sobre él. Otro' $ {VAR% /} '(antes) no es difícil. +1 para la respuesta, y también mencionando la palabra ** caro **. – konsolebox

0
function basename { 
    shopt -s extglob 
    __=${1%%+(/)} 
    [[ -z $__ ]] && __=/ || __=${__##*/} 
} 

basename "$PWD" 
echo "$__" 
Cuestiones relacionadas