파일 /from/here/to/there.txt
이 있고 dirname to
대신 dirname의 마지막 부분 만 가져 오려면 /from/here/to
어떻게해야합니까?
답변
basename
파일이 아니더라도 사용할 수 있습니다 . dirname
를 사용 하여 파일 이름을 제거한 다음을 사용 basename
하여 문자열의 마지막 요소를 가져옵니다.
dir="/from/here/to/there.txt"
dir="$(dirname $dir)" # Returns "/from/here/to"
dir="$(basename $dir)" # Returns just "to"
답변
의 반대 dirname
IS basename
:
basename "$(dirname "/from/here/to/there.txt")"
답변
bash
문자열 함수 사용 :
$ s="/from/here/to/there.txt"
$ s="${s%/*}" && echo "${s##*/}"
to
답변
Bash 매개 변수 확장을 사용하면 다음 과 같이 할 수 있습니다.
path="/from/here/to/there.txt"
dir="${path%/*}" # sets dir to '/from/here/to' (equivalent of dirname)
last_dir="${dir##*/}" # sets last_dir to 'to' (equivalent of basename)
외부 명령이 사용되지 않으므로 더 효율적입니다.
답변
순수한 BASH 방법 :
s="/from/here/to/there.txt"
[[ "$s" =~ ([^/]+)/[^/]+$ ]] && echo "${BASH_REMATCH[1]}"
to
답변
awk
이를 수행 하는 방법은 다음과 같습니다.
awk -F'/' '{print $(NF-1)}' <<< "/from/here/to/there.txt"
설명:
-F'/'
필드 구분 기호를 “/”로 설정합니다.- 두 번째 마지막 필드 인쇄
$(NF-1)
<<<
그 이후의 모든 것을 표준 입력으로 사용합니다 ( wiki 설명 )
답변
한 가지 더
IFS=/ read -ra x <<<"/from/here/to/there.txt" && printf "%s\n" "${x[-2]}"