반응형
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"
의 반대 dirname
IS 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
반응형
'Program Tip' 카테고리의 다른 글
Hashmap은 int, char에서 작동하지 않습니다. (0) | 2020.11.23 |
---|---|
피보나치 힙 데이터 구조의 직관은 무엇입니까? (0) | 2020.11.23 |
IPython 노트북에 웹 페이지에 대한 링크 삽입 (0) | 2020.11.23 |
build.gradle에서 사용자 지정 메서드를 정의하고 호출하는 방법 (0) | 2020.11.23 |
오른쪽에 카운터가있는 NavigationView 메뉴 항목 (0) | 2020.11.23 |