2012-05-18 15 views
17

Jeśli wpiszesz pwd masz coś takiego:Take ostatnią część ścieżki folderu w skorupkach

/home/username/Desctop/myfolder/

Jak wziąć ostatnią część? Ścieżka myfolder.

To musi być proste, ale nie mogłem znaleźć łatwego rozwiązania w powłoce. Wiem, jak dbać o to w java, ale nie w powłoce.

dzięki

+0

Nie sądzę, że to prawda: wynik 'pwd' ma ** nie ** zawiera końcowe'/'. – Jens

Odpowiedz

16

masz rację - to szybka komenda:

basename "$PWD" 
+1

To co najmniej jeden bezużyteczny drogie widelec. A co z użyciem '$ PWD'? – Jens

0

Można używać basename na to, pod warunkiem, że ostatnia część jest rzeczywiście komponent katalogu (nie pliku):

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

Aby wyodrębnić ostatnią część ścieżki, użyj basename ...

basename $(pwd); 
2

W systemie Linux dostępne są dwie komendy: dirname i basename. dirname wyodrębnia wszystkie oprócz ostatniej części ścieżki, a basename wyodrębnia tylko ostatnią część ścieżki.

W tym przypadku, przy użyciu basename będą robić to, co chcesz:

basename $(pwd)

7

Korzystanie basename $(pwd)dwa bezużyteczne i kosztowne widelce.

echo ${PWD##*/} 

powinno załatwić sprawę całkowicie w powłoce bez kosztownych Forks (szkopuł: dla katalogu jest to pusty ciąg znaków).

+1

Jedyną rzeczą jest to, że ostatni '/' zostaje usunięty w 'podstawowej_kacji' (może nie pply z $ PWD, ale w innych niestandardowych ścieżkach może .Wciąż wybrałbym tę metodę ponad to. Kolejny' $ {VAR% /} '(przed) nie jest trudny, +1 dla odpowiedzi, a także wymawia słowo ** drogie **. – konsolebox

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

basename "$PWD" 
echo "$__" 
Powiązane problemy