답변:
dirname $file
당신이 찾고있는 것입니다
dirname "$file"
, 오히려. 따옴표가 없으면 파일 또는 디렉토리 이름에 공백이 있으면 오작동합니다.
dirname $file
출력됩니다
stuff/backup
다음과 반대입니다 basename
.
basename $file
출력 할 것이다
file.zip
${file%/*}
Urvin / LuFFy가 제안한 것과 같이 사용 하면 외부 명령에 의존하지 않기 때문에 기술적으로 더 좋습니다. 같은 방법으로 basename을 얻으려면 할 수 있습니다 ${file##*/}
. 필요한 경우가 아니면 외부 명령을 사용할 필요가 없습니다.
file="/stuff/backup/file.zip"
filename=${1##*/} # file.zip
directory=${1%/*} # /stuff/backup
또한 이러한 방식으로 완전히 POSIX를 준수합니다. 도움이 되었기를 바랍니다. :-)
dirname
당신이 당신의 경로로 시작하는 완전한되는지 확실하지 않은 경우 내장 된 접근 방식 (효율적)에 비해 장점이있다, 그리고 그의. 당신이 가지고 있다면 file=file.zip
, dirname "$file"
는 반환 .
하지만는 ${file%/*}
반환 file.zip
합니다.
case $file in */*) dir=${file%/*};; *) dir=.;; esac
여전히 POSIX-y이며 문제를 해결합니다.
dirname $file