[bash] Bash에서 dirname의 마지막 부분을 얻는 방법

파일 /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"


답변

의 반대 dirnameIS 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]}"