[linux] Bash의 파일 경로 인수에서 마지막 dirname / filename 가져 오기

개발 서버에서 호스팅되는 SVN에 대한 커밋 후 후크를 작성하려고합니다. 내 목표는 커밋 된 프로젝트의 사본을 서버에서 호스팅되는 디렉토리로 자동 체크 아웃하는 것입니다. 그러나 프로젝트가 호스팅되는 동일한 하위 디렉토리로 체크 아웃하려면 스크립트에 전달 된 디렉토리 문자열의 마지막 디렉토리 만 읽을 수 있어야합니다.

예를 들어 프로젝트 “example”에 대해 SVN 커밋을 수행하면 내 스크립트는 “/ usr / local / svn / repos / example”을 첫 번째 인수로 가져옵니다. 문자열의 끝에서 “example”을 가져온 다음 다른 문자열과 연결하여 “/ server / root / example”에 체크 아웃하고 변경 사항이 즉시 적용되도록해야합니다.



답변

basename 경로의 디렉토리 접두사를 제거합니다.

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


답변

다음 접근 방식을 사용하여 경로 이름의 경로를 얻을 수 있습니다.

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

산출:

c
b
a


답변

Bash는 external을 호출하지 않고도 경로의 마지막 부분을 가져올 수 있습니다 basename.

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


답변