dir/로 이동하기 위해 `cd dir/filename`을 어떻게 얻나요?

dir/로 이동하기 위해 `cd dir/filename`을 어떻게 얻나요?

나는 이것을 할 수 있다는 것을 알았습니다 cd.문서토론.

cd myDirectory/anyname.anyExtension 와 동등할 것이다 cd myDirectory/

이 동작을 구현하는 데 가장 적합한 별칭이나 함수는 무엇입니까?

편집하다:미안해요 처음에는 언급하지 않았어요 :제가 사용해요zsh

답변1

디렉토리를 입력하고 bash.

cd() {
    local file="${!#}"

    if (( "$#" )) && ! [[ -d "$file" ]]; then
        builtin cd "${@:1:($#-1)}" "${file%/*}"
    else
        builtin cd "$@"
    fi
}

CD의 옵션(등)을 절대 사용하지 않을 경우에는 -P다음으로도 충분합니다:

cd() { 
    if [ -d "$1" ] || [ -z "$1" ]; then
        builtin cd "$@"
    else
        builtin cd "${1%/*}"
    fi
}

답변2

dirname예를 들어 다음을 사용하여 경로에서 파일 이름을 제거 할 수 있습니다 .

mycd() { cd "$(dirname "$1")"; }

바라보다 man dirname.

답변3

에서는 zsh다음과 같은 작업을 자주 수행합니다.

cd /path/to/somefile(:h)

( h을 위한 head).

심볼릭 링크인 경우 somefile다음과 같이 할 수도 있습니다.

cd somefile(:A:h)

심볼릭 링크 대상을 찾을 수 있는 디렉터리에 도달합니다.


zsh이제 Chris의 유일한 솔루션은 다음과 같습니다 bash.

cd() {
  [[ ! -e $argv[-1] ]] || [[ -d $argv[-1] ]] || argv[-1]=${argv[-1]%/*}
  builtin cd "$@"
}

에서는 "단어"가 삭제하는 항목을 zsh재정의할 수도 있습니다 .Ctrl-W

zsh단어 기반 이동/전치/제거 위젯의 맥락에서 "단어"는 기본적 $WORDCHARS으로 포함된 일련의 숫자와 변수의 문자입니다 /.

하나의 경로 구성 요소만 제거 되도록 /다음에서 제거할 수 있습니다 .$WORDCHARSCtrl-W

WORDCHARS=${WORDCHARS/\/}

또 다른 유용한 확장 기능은 select-word-style다양한 텍스트 스타일 중에서 대화형으로 선택할 수 있는 위젯입니다.

autoload select-word-style
zle -N select-word-style
bindkey '\ew' select-word-style

그런 다음 을 누르면 Alt-W다양한 텍스트 스타일 중에서 선택할 수 있습니다.

$ cd /blah/blih<Alt-W>
Word styles (hit return for more detail):
(b)ash (n)ormal (s)hell (w)hitespace (d)efault (q)uit
(B), (N), (S), (W) as above with subword matching
?

답변4

cd2() {
 arg=() dir= cmd= IFS=" " msg='[-L|[-P [-e]]|-h] [dir|file]'

 while [ "$#" -gt 1 ] ; do
  case "$1" in
   -h) printf "%s: cd2 %s\n" "$0" "$msg"
    return 1 ;;
   *) arg+=("$1") ;;
  esac
  shift
 done

 [ -f "${1:-}" ] && dir="$(dirname ${1:-})" || dir="${1:A}"
 [ ! -z "$arg" ] && cmd="cd ${arg[@]} $dir" || cmd="cd $dir"

 if ! $cmd 2>/dev/null; then
  printf "%s: cd2 %s\n" "$0" "$msg"
  return 1
 fi
}

관련 정보