Получить последний dirname / filename в аргументе пути к файлу в Bash - PullRequest
185 голосов
/ 21 июля 2010

Я пытаюсь написать хук после фиксации для SVN, который размещен на нашем сервере разработки. Моя цель - попытаться автоматически извлечь копию зафиксированного проекта в каталог, где он размещен на сервере. Однако мне нужно иметь возможность читать только последний каталог в строке каталога, переданной сценарию, чтобы оформить заказ в том же подкаталоге, где размещены наши проекты.

Например, если я сделаю SVN-коммит в проекте "example", мой скрипт получит "/ usr / local / svn / repos / example" в качестве первого аргумента. Мне нужно получить только «пример» из конца строки, а затем соединить его с другой строкой, чтобы я мог оформить заказ в «/ server / root / example» и сразу же увидеть изменения.

Ответы [ 3 ]

295 голосов
/ 21 июля 2010

basename удаляет префикс каталога пути:

$ basename /usr/local/svn/repos/example
example
$ echo "/server/root/$(basename /usr/local/svn/repos/example)"
/server/root/example
71 голосов
/ 23 апреля 2012

Для получения любого пути к пути можно использовать следующий подход:

pathname=a/b/c
echo $(basename $pathname)
echo $(basename $(dirname $pathname))
echo $(basename $(dirname $(dirname $pathname)))

Вывод:

c
b
a
69 голосов
/ 21 июля 2010

Bash может получить последнюю часть пути без вызова внешнего basename:

subdir="/path/to/whatever/${1##*/}"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...