Bash-get last dirname / filename in a file path argument

Próbuję napisać post-commit hook dla SVN, który jest hostowany na naszym serwerze deweloperskim. Moim celem jest próba automatycznego kasowania kopii zatwierdzonego projektu do katalogu, w którym jest on hostowany na serwerze. Jednak muszę być w stanie odczytać tylko ostatni katalog w ciągu katalogu przekazany do skryptu w celu checkout do tego samego podkatalogu, gdzie nasze projekty są hostowane.

Na przykład, jeśli wykonam commit SVN do projektu "example", mój skrypt otrzyma "/usr / local / svn/repos / example " jako pierwszy argument. Muszę dostać tylko "przykład" z końca łańcucha, a następnie połączyć go z innym ciągiem, więc mogę checkout do "/ server / root / example " I zobaczyć zmiany na żywo natychmiast.

Author: Rodrigo, 2010-07-21

3 answers

basename usuwa przedrostek katalogu ścieżki:

$ basename /usr/local/svn/repos/example
example
$ echo "/server/root/$(basename /usr/local/svn/repos/example)"
/server/root/example
 255
Author: sth,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-20 20:29:44

Bash może pobrać ostatnią część ścieżki bez konieczności wywoływania zewnętrznego basename:

subdir="/path/to/whatever/${1##*/}"
 61
Author: Dennis Williamson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-20 21:28:25

Do uzyskania dowolnej ścieżki o nazwie pathname można użyć następującego podejścia:

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

Wyjście:

c
b
a
 54
Author: Jingguo Yao,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-18 12:10:36