Подтвердить что ты не робот

Bash - получить последний dirname/filename в аргументе пути к файлу

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

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

4b9b3361

Ответ 1

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

$ basename /usr/local/svn/repos/example
example
$ echo "/server/root/$(basename /usr/local/svn/repos/example)"
/server/root/example

Ответ 2

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

subdir="/path/to/whatever/${1##*/}"

Ответ 3

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

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

Вывод:

c
b
a