파일의 부모 디렉토리를 가져옵니다


21

파일의 부모 디렉토리 이름 만 가져오고 싶습니다.

예 : 내가있을 때 path=/a/b/c/d/file, 난 단지 싶어 d하지 /a/b/c/d(내가로부터 얻을 수있는 dirname $path) 출력으로.

이를 수행 할 수있는 정교한 방법이 있습니까?

답변:


24

당신이 기본 이름 원하는 것 같은데 이 dirname를 :

$ filepath=/a/b/c/d/file
$ parentname="$(basename "$(dirname "$filepath")")"
$ echo "$parentname"
d

왜 내가 받고 있습니다. 데비안의 부모 디렉토리 대신?
Amir

@ Amir : 전체 경로 또는 파일 이름으로 시작합니까? 파일 이름 인 경우 dirname명령은 현재 디렉토리 (일명 ".")에 있다고 가정합니다.
Gordon Davisson

글쎄, 나는 이것을 사용하고 있습니다 :parentname="$(basename "$(dirname "$pwd")")"
Amir

1
@Amir : 쉘 변수는 대소 문자를 구분 PWD하며 대문자 여야합니다. 시도하십시오 parentname="$(basename "$(dirname "$PWD")")".
Gordon Davisson

5

pwd를 사용하여 현재 작업 디렉토리를 확보하고 매개 변수 확장 을 사용 하여 다른 (서브) 쉘에 포크하지 않도록 할 수 있습니다.

echo ${PWD##*/}

편집 : 입증 된 출처


질문은 현재 디렉토리와 관련이 없습니다. 사용 가능${path##*/}
Matteo

1

나는 이것이 덜 자원적인 해결책이라고 생각한다.

 $ 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`로 시도하십시오 .
Gordon Davisson

과연. 그러나 부모 디렉토리는 foofile무엇입니까? 전체 경로가 아닌 경우 알 수 없습니다 ( foofile기존 파일이 "문자열"일뿐만 아니라).
uzsolt

1

bash에서 한 줄로 :

$ dirname /a/b/c/d/file | sed 's,^\(.*/\)\?\([^/]*\),\2,'

2
관련 절차를 자세히 설명해 주시겠습니까? 미래 독자들에게 도움이 될 수 있습니다. 또한 1/2 줄 답변을 쓰지 마십시오.
Lorenzo Von Matterhorn

0

나는 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"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.