파일이 있는 디렉토리로 변경

파일이 있는 디렉토리로 변경

파일에 대한 상대 경로가 있습니다. 파일이 있는 디렉토리로 전환하고 싶습니다. 이를 수행할 수 있는 방법이 있습니까?

나는 다양한 "찾기" 조합을 시도했지만 성공하지 못했습니다.

답변1

사용 dirname:

cd "$(dirname "/path/to/file")"

또는

file="/path/to/file"
cd "$(dirname "$file")"

사용법 shell구문:

file="/path/to/file"
cd "${file%/*}"

답변2

zsh대신 사용하십시오 bash:

cd /path/to/file(:h)

또는:

cd -- **/file([1]:h)

현재 디렉토리 file(한정자가 추가되지 않는 한 숨겨진 디렉토리는 아님) 아래 어디든 재귀적으로 찾고 발견된 첫 번째 파일의 상위 파일을 찾으려면(알파벳 순서로, 또는 한정자를 사용하여 다른 순서를 선택할 수 있습니다) .DcdoO

:h얻을 수 있는 수정자입니다.머리파일의 (디렉터리 이름)입니다. 이것은 csh70년대 후반 의 것이며 (비록 역사적 확장에 대해서만) vim또는 그 안에서도 찾을 수 있습니다. 그러나 glob 한정자(glob을 추가로 한정하거나 수정하기 위해 내부적으로 사용되는 부분)는 zsh에만 적용됩니다.bash(...)

GNU 도구를 사용하면 bash다음을 수행할 수 있습니다.

IFS= read -rd '' dir <(
  LC_ALL=C find . -name '.?*' -prune -o -name file -printf '%h\0' |
    sort -z
) && cd "$dir"

또는:

shopt -s globstar # enable zsh-style recursive globbing though
                  # it's still somewhat buggy in bash
shopt -s failglob

files=(./**/file) && cd "${file%/*}"

관련 정보