bash 쉘에서 빠른 디렉토리 탐색 (예 : /Project/Warnest/docs/및) 를

예를 들어 완전히 관련이없는 경로에있는 디렉토리 (예 : /Project/Warnest/docs/및) 를 자주 전환하고 싶습니다 ~/Dropbox/Projects/ds/test/.

그러나 나는 cd /[full-path]/항상 타이핑하고 싶지 않습니다 . 이전에 작동 한 디렉토리로 전환하기위한 바로 가기 명령이 있습니까?

내가 생각할 수있는 한 가지 해결책 bash .profile은 자주 사용되는 디렉토리에 대한 환경 변수를 추가 하고 cd해당 변수를 사용하여 환경 변수를 추가 하는 것입니다.

그러나 이것에 대한 다른 해결책이 있습니까?



답변

두 디렉토리 간을 전환하는 경우 cd -앞뒤로 이동할 수 있습니다 .


답변

쉘 변수가 CDPATH있는 bashkshcdpath인은 zsh:

CDPATH    The search path for the cd command. This is a colon-separated
          list of directories in which the shell looks for destination
          directories specified by the cd command.

~ / .bashrc에서 설정할 수 있습니다.

export CDPATH=/Project/Warnest:~/Dropbox/Projects/ds

다음 cd docscd test최초의 발견과 같은 디렉토리로 이동합니다. (같은 이름을 가진 디렉토리가 현재 디렉토리에 존재하더라도 CDPATH여전히 참조 CDPATH될 것 입니다. 주어진 이름을 가진 서브 디렉토리를 가진 디렉토리가 더 많이 포함 된다면 , 첫 번째 디렉토리가 사용됩니다.)


답변

다른 시도는 autojump 라는 도구 입니다. j기본적으로 별칭에 대한 호출 데이터베이스를 유지하고 가고 싶은 곳을 현명하게 결정하려고 시도합니다. 예를 들어 자주 입력하는 경우 :

j ~/Pictures

다음을 사용하여 핀치 할 수 있습니다.

j Pic

데비안과 우분투에서 사용할 수 있으며 기본적으로 ~/.bashrc또는 사용자별로 포함되어 ~/.zshrc있습니다.


답변

디렉토리 수가 적 으면이를 사용 pushd하여 디렉토리 를 회전 할 수 있습니다.

# starting point
$ pwd
/Project/Warnest/docs
# add second dir and change to it
$ pushd ~/Dropbox/Projects/ds/test
~/Dropbox/Projects/ds/test /Project/Warnest/docs
# prove we're in the right place
$ pwd
~/Dropbox/Projects/ds/test
# swap directories
$ pushd
/Project/Warnest/docs ~/Dropbox/Projects/ds/test

와 달리 cd -, 둘 이상의 디렉토리에 이것을 사용할 수 있습니다


Noach의 제안에 따라, 나는 지금 이것을 사용하고 있습니다 :

function pd()
{
    if [[ $# -ge 1 ]];
    then
        choice="$1"
    else
        dirs -v
        echo -n "? "
        read choice
    fi
    if [[ -n $choice ]];
    then
        declare -i cnum="$choice"
        if [[ $cnum != $choice ]];
        then #choice is not numeric
            choice=$(dirs -v | grep $choice | tail -1 | awk '{print $1}')
            cnum="$choice"
            if [[ -z $choice || $cnum != $choice ]];
            then
                echo "$choice not found"
                return
            fi
        fi
        choice="+$choice"
    fi
    pushd $choice
}

사용법 예 :

# same as pushd +1
$ pd 1

# show a prompt, choose by number
$ pd
 0 ~/Dropbox/Projects/ds/test
 1 /Project/Warnest/docs
 2 /tmp
? 2
/tmp ~/Dropbox/Projects/ds/test /Project/Warnest/docs

# or choose by substring match
$ pd
 0 /tmp
 1 ~/Dropbox/Projects/ds/test
 2 /Project/Warnest/docs
? doc
/Project/Warnest/docs /tmp ~/Dropbox/Projects/ds/test

# substring without prompt
$ pd test
~/Dropbox/Projects/ds/test /Project/Warnest/docs /tmp

분명히 이것은 스택을 통해 회전하기위한 것이며 새로운 경로 추가를 처리하지 않습니다. 어쩌면 이름을 바꿔야 할 수도 있습니다.


답변

나는 aliasbashrc에서 그 CD를 사용합니다.
같은 :

alias wdoc='cd ~/Project/Warnest/docs'
alias dstest='cd ~/Dropbox/Projects/ds/test'

답변

이 문제를 해결하는 스크립트 (일반적으로 acd_funch.sh)를 찾았습니다. 이를 사용 cd --하여 마지막으로 사용한 10 개의 디렉토리를 볼 수 있습니다 . 다음과 같이 보일 것입니다 :

0  ~/Documents/onedir
1  ~/Music/anotherdir
2  ~/Music/thirddir
3  ~/etc/etc

~/Music/thirddir그냥 입력으로 이동cd -2

참고 문헌

참고 : 이 스크립트는 원래 Linux gazette 기사에 게시되어 있습니다. acd_func.sh – bash의 CD를 확장하여 방문한 디렉토리 이름의 기록을 유지, 표시 및 액세스합니다 .


답변

cdable_varsbash 에서 쉘 옵션을 사용해보십시오 . 로 켭니다 shopt -s cdable_vars.

그런 다음 변수를 설정해야합니다 export dir1=/some/path. 그리고 마지막으로 cd dir1, 등등. 당신은 ~/.bashrc그것을 스틱 만들기 위해 넣을 수 있습니다 .