Program Tip

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

programtip 2020. 11. 23. 19:55
반응형

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 방법 :

s="/from/here/to/there.txt"
[[ "$s" =~ ([^/]+)/[^/]+$ ]] && echo "${BASH_REMATCH[1]}"
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)

외부 명령이 사용되지 않으므로 더 효율적입니다.


한 가지 더

IFS=/ read -ra x <<<"/from/here/to/there.txt" && printf "%s\n" "${x[-2]}"

awk이를 수행 하는 방법은 다음과 같습니다.

awk -F'/' '{print $(NF-1)}' <<< "/from/here/to/there.txt"

설명:

  • -F'/' 필드 구분 기호를 "/"로 설정합니다.
  • 두 번째 마지막 필드 인쇄 $(NF-1)
  • <<<그 이후의 모든 것을 표준 입력으로 사용합니다 ( wiki 설명 )

이 질문은 THIS 와 비슷 합니다.

이를 해결하기 위해 다음을 수행 할 수 있습니다.

DirPath="/from/here/to/there.txt"
DirPath="$(dirname $DirPath)"
DirPath="$(basename $DirPath)"

echo "$DirPath"

내 친구가 말했듯이 이것이 가능합니다.

basename `dirname "/from/here/to/there.txt"`

경로의 일부를 얻으려면 다음을 수행 할 수 있습니다.

echo "/from/here/to/there.txt" | awk -F/ '{ print $2 }'
OR
echo "/from/here/to/there.txt" | awk -F/ '{ print $3 }'
OR
etc

참고 URL : https://stackoverflow.com/questions/23162299/how-to-get-the-last-part-of-dirname-in-bash

반응형