Возьмите последнюю часть пути к папке в оболочке

20

Если вы наберете pwd, вы получите что-то вроде:

/home/username/Desctop/myfolder/

Как принять последнюю часть? myfolder path.

Это должно быть просто, но я не смог найти легкого решения в оболочке. Я знаю, как позаботиться об этом в Java, но не в оболочке.

спасибо

    
задан Lukap 18.05.2012 в 16:06
источник
  • Я не думаю, что это правильно: вывод pwd не содержит трейлинг /. –  Jens 20.08.2015 в 10:19

6 ответов

17

Вы правы - это быстрая команда:

basename "$PWD"
    
ответ дан andyras 18.05.2012 в 16:10
  • Это по крайней мере одна бесполезная дорогая вилка. Как насчет использования $ PWD? –  Jens 05.06.2014 в 08:24
9

Использование basename $(pwd) - это две бесполезные и дорогие вилки .

echo ${PWD##*/}

должен полностью выполнить задачу в оболочке без дорогих форков (загвоздка: для корневого каталога это пустая строка).

    
ответ дан Jens 19.05.2012 в 13:36
  • Единственное, что последнее / удаляется в basename (возможно, это не pply с $ PWD, а в других настраиваемых путях). Еще я бы выбрал этот метод над ним. Еще $ {VAR% /} (до) это не сложно. +1 для ответа, а также упоминание слова дорого. –  konsolebox 05.06.2014 в 08:29
2

В Linux есть пара команд, dirname и basename . dirname извлекает все, кроме последней части пути, а basename извлекает только последнюю часть пути.

В этом случае использование basename будет делать то, что вы хотите:

basename $(pwd)

    
ответ дан octopusgrabbus 19.05.2012 в 13:33
0

Для этого вы можете использовать basename , если последняя часть действительно является компонентом каталога (а не файлом):

$ basename /home/username/Desctop/myfolder/
myfolder
    
ответ дан Eduardo Ivanec 18.05.2012 в 16:09
0

Чтобы извлечь последнюю часть пути, попробуйте использовать basename ...

basename $(pwd);
    
ответ дан alex 18.05.2012 в 16:09
0
function basename {
    shopt -s extglob
    __=${1%%+(/)}
    [[ -z $__ ]] && __=/ || __=${__##*/}
}

basename "$PWD"
echo "$__"
    
ответ дан konsolebox 05.06.2014 в 08:39