파일 인수를 받아들이고 인수의 파일 부분을 완전히 무시하고 포함 디렉터리로 이동하는 Unix 명령이나 셸 스크립트가 있습니까?
답변1
다음과 같은 함수를 만들 수 있습니다.
cd_to_file_location() {
location=$(dirname -- "$1")
cd -- "$location"
}
# test it out
$ mkdir /tmp/foodir
$ touch /tmp/foodir/a
$ cd_to_file_location /tmp/foodir/a
$ pwd
/tmp/foodir
답변2
존재하다 zsh
:
cdparent() cd -- $1:h
현재 작업 디렉터리를 첫 번째 인수의 디렉터리 부분(ead) 으로 변경하는 함수 가 cdparent
정의됩니다 .h
다음과 같이 할 수도 있습니다.
cd some/file(:h)
여기서도 :h
glob 한정자는 주어진 파일의 헤더를 검색하는 데 사용됩니다.
이 :h
수정자는 1970년대 csh에서 유래되었으며 매개변수 확장 및 기록 교체에 사용할 수 있습니다. 에서는 zsh
전역 한정자가 추가되는 상황에 적용할 수 있습니다. 에서는 bash
히스토리 교체에만 적용할 수 있습니다. 이러한 수정자 중 일부( include )는 예를 들어 현재 편집된 파일의 디렉토리로 chdir을 보낼 수 있는 에서도 :h
사용할 수 있습니다 .vim
:cd %:h
(이것부모위의 표현은 약간 오해의 소지가 있을 수 있습니다 . 예를 들어 이것은 a 대신 cdparent ..
a를 실행합니다.cd .
cd ../..
부모제안 가능).
답변3
대상 경로가 디렉터리인지 확인하는 함수를 사용할 수 있습니다. 그렇지 않은 경우 경로에서 디렉터리 이름을 가져오고 해당 디렉터리로 CD를 보냅니다. 예를 들어:
mycd()
{
if [ ! $# -eq 1 ]
then
printf "Usage: mycd <PATH>\n" >&2
return
fi
if [ ! -d "$1" ]
then
dest="$(dirname -- "$1")"
set -- "$dest"
fi
cd -- "$1"
}
이는 디렉토리와 파일 경로를 처리하기에 충분히 일반적이며, 실제를 사용하므로 다음을 사용하여 cd
언제든지 이전 디렉토리로 돌아갈 수 있습니다 cd -
.
$ mkdir /tmp/test-dir/
$ touch /tmp/test-dir/FILE
$ mycd /tmp/test-dir/FILE
$ pwd
/tmp/test-dir
$ mycd /tmp/
$ pwd
/tmp
$ cd -
/tmp/test-dir
$ pwd
/tmp/test-dir
답변4
당신은 그것을 찾고 있습니까?
cd "${dirname "$1"}"
pushd
필요한 경우 대신 사용할 수도 있습니다 .cd