답변:
당신이 기본 이름 원하는 것 같은데 의 이 dirname를 :
$ filepath=/a/b/c/d/file
$ parentname="$(basename "$(dirname "$filepath")")"
$ echo "$parentname"
d
dirname
명령은 현재 디렉토리 (일명 ".")에 있다고 가정합니다.
parentname="$(basename "$(dirname "$pwd")")"
PWD
하며 대문자 여야합니다. 시도하십시오 parentname="$(basename "$(dirname "$PWD")")"
.
나는 이것이 덜 자원적인 해결책이라고 생각한다.
$ filepath=/a/b/c/d/file
$ echo ${${filepath%/*}##*/}
d
편집 : bash에서는 중첩 확장을 사용할 수 없지만 zsh에서는 작동합니다. 배쉬 버전 :
$ filepath=/a/b/c/d/file
$ path=${filepath%/*}
$ echo ${path##*/}
d
filepath=file
또는 filepath = / file`로 시도하십시오 .
foofile
무엇입니까? 전체 경로가 아닌 경우 알 수 없습니다 ( foofile
기존 파일이 "문자열"일뿐만 아니라).
bash에서 한 줄로 :
$ dirname /a/b/c/d/file | sed 's,^\(.*/\)\?\([^/]*\),\2,'
나는 Julian67의 대답이 가장 좋았지 만 약간 확장 된 버전이 있습니다.
file_path = "a/b/c/d/file.txt"
parent=$(echo $file_path | sed -e 's;\/[^/]*$;;') # cut away "/file.txt";'$' is end of string
parent=$(echo $parent | sed -e 's;.*\/;;') # cut away "/a/b/c/"
echo $parent # --> you get "d"