파일에 대한 상대 경로가 있습니다. 파일이 있는 디렉토리로 전환하고 싶습니다. 이를 수행할 수 있는 방법이 있습니까?
나는 다양한 "찾기" 조합을 시도했지만 성공하지 못했습니다.
답변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
(한정자가 추가되지 않는 한 숨겨진 디렉토리는 아님) 아래 어디든 재귀적으로 찾고 발견된 첫 번째 파일의 상위 파일을 찾으려면(알파벳 순서로, 또는 한정자를 사용하여 다른 순서를 선택할 수 있습니다) .D
cd
o
O
:h
얻을 수 있는 수정자입니다.머리파일의 (디렉터리 이름)입니다. 이것은 csh
70년대 후반 의 것이며 (비록 역사적 확장에 대해서만) 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%/*}"