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.
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
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##*/}"
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
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