파일 매개변수를 가져오고 해당 디렉토리로 이동하시겠습니까? [복사]

파일 매개변수를 가져오고 해당 디렉토리로 이동하시겠습니까? [복사]

파일 인수를 받아들이고 인수의 파일 부분을 완전히 무시하고 포함 디렉터리로 이동하는 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)

여기서도 :hglob 한정자는 주어진 파일의 헤더를 검색하는 데 사용됩니다.

: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

관련 정보