cd를 사용하여 여러 디렉토리 레벨로 이동


39

나는 종종 깊게 중첩 된 폴더 (/ path / to / project / com / java / lang / whatever 등)를 초래하는 Java 프로젝트를 다루고 있으며 때로는 4 디렉토리 레벨 이상으로 점프 할 수 있기를 원합니다. cd ../../../ ..를 입력하는 것은 고통스럽고 symlink하고 싶지 않습니다. 여러 디렉토리 수준으로 올라갈 수있는 cd 플래그가 있습니까 (제 머리에는 cd -u 4와 같을 것입니다)? 불행히도 나는 구체적으로 cd에 대한 매뉴얼 페이지를 찾을 수 없으며, 대신 쓸모없는 "builtins"페이지를 얻는 것입니다.


1
cd ...'.'의 수 를 해석하도록 bash 수정 올라갈 레벨의 수입니다. 이로 인해 내가 모르는 충돌이 발생합니까?

맥 OS 여기 오는 사람들을 위해 설치할 수 있습니다 zshOh My Zsh에 더 나은 대안이다 bash그리고 당신은 할 수있는 cd ...그것이 있어야처럼 (다중 점)
도미닉

답변:


29

아니면 ... 이것을 시도하십시오 : (예, 구글)

..n을 사용하여 디렉토리를 탐색하십시오.

아래 예에서 ..4는 4 개의 디렉토리 레벨로, ..3은 3 개의 디렉토리 레벨로, ..2는 2 개의 디렉토리 레벨로 올라갑니다.

.bash_profile에 다음 별명을 추가하고 다시 로그인하십시오.

별칭 .. = "cd .."

별칭 ..2 = "cd ../ .."

별칭 ..3 = "cd ../../ .."

(기타)

해킹 # 2 참조


10
차라리 별칭을 사용하는 것 .., ...그리고 ....그들이으로 빠르게 입력 할 수 있지만, 별명의 원리는 물론 동일합니다.
Bernhard

1
@bernhard 당신은 그것이 충돌을 일으킬 것이라고 믿지 않기 때문에 환영합니다. 웹 사이트에서 인용했기 때문에 그대로 그대로 두었습니다.
cutrightjm

DOS에 대한 4DOS.EXE 쉘도 지원 cd ..., cd ....등이 매우 편리했다.
Alexios

.....는 ..4보다 빠르지 않습니다. 실제로 2 자 느립니다.
Ryan

29

별명과 함께 간단한 기능 :

function cd_up() {
  cd $(printf "%0.s../" $(seq 1 $1 ));
}
alias 'cd..'='cd_up'

~/.bashrc모든 인스턴스에서 원하는 경우 이를 정의 할 수 있습니다.

사용하기 간단합니다 :

$ cd.. 10

좋은 것! 나를 위해 작동합니다! Bash 4.3.11
Carlos Nunez

2
좋은 답변; 당신이 더 나은 솔루션에 비해 다음과 같은 것을 지적 할 수 있기 때문에, 여러 번 일명 아니라 중간 디렉토리보다 이전 호출에서 작업 디렉토리로 설정됩니다. PS- 원하는 경우 단순화합니다 . eval $(printf "cd ..;%.s" $(seq $1))cd~-$OLDPWDcd $(printf %.s../ $(seq "$1"))
Toby Speight

10

설정이 필요없는 간단한 첨단 기술 솔루션. bash그래도 -style 명령 편집 을 사용하는 쉘에서만 작동합니다 .

  • 유형 cd ..
  • Up-arrow Return필요한만큼 누르십시오 . 두 손가락을 사용하면 매우 빠릅니다.

2
하하, 나쁘지 않은 대답 :)
joshmcode

8

정답은 'cd + n'이며, 여기서 n은 원하는 레벨 수입니다. 이 문서는 어디에도 문서화되어 있지 않습니다.


17
적어도 bash에서는 작동하지 않습니다.
HongboZhu

5
Debian과 함께 제공된 bash 4.2.25에서는 작동하지 않습니다. 호기심으로, 어떤 * nix 및 / 또는 쉘을 사용하고 있습니까?
Alexios

Bash에는 dirs[+ n]을 인수로 사용하여을 통해 추가 된 n 번째 고유 디렉토리를 인쇄 하는 내장 기능이 pushd있습니다. 당신이 alias cd하려면 pushd, 당신은 이것을 사용할 수 있습니다. 그러나 이것은 OP의 질문에 대한 기술적 대답이 아닙니다. 이것은 고유 한 디렉토리 와 관련이 있기 때문에 동일한 디렉토리로 돌아갈 때 시간이 지남에 따라 순서가 엉망이됩니다.
Brian Peterson

그래, pushd그리고 popd또한이 작업을 할 수있는 이유입니다, A [+ N] 옵션을. 또한 불완전하고 간접적이지만 질문에 대한 답변으로 사용할 수 있다고 생각합니다. 종종 최근에 위의 디렉토리를 방문 했으므로 디렉토리 스택에 저장된 마지막 10 개의 디렉토리에 있습니다.
Brian Peterson

나를 위해 작동하지 않았다 ...
Vass

4

함수를 작성할 수 있습니다 (쉘 자체의 상태, 즉 작업 디렉토리를 변경하려면 함수 여야합니다. 외부 명령은 자체 프로세스에만 영향을 미칩니다).

여기에 인수 (기본 1)로 전달 수준의 숫자 올라갈 것입니다 함수의 실제 디렉토리 구조 (그래서 같은 cd -P .., N 번) :

up() {
    # default parameter to 1 if non provided
    declare -i d=${@:-1}
    # ensure given parameter is non-negative. Print error and return if it is
    (( $d < 0 )) && (>&2 echo "up: Error: negative value provided") && return 1;
    # remove last d directories from pwd, append "/" in case result is empty
    cd "$(pwd | sed -E 's;(/[^/]*){0,'$d'}$;;')/";
}

다음과 같이 사용하십시오.

up 4

1
이 코드는 질문에 대답 할 수 있지만,이 코드가 질문에 응답하는 이유 및 / 또는 방법에 대한 추가 컨텍스트를 제공하면 장기적인 가치가 향상됩니다.
Donald Duck

1
동의하며 몇 가지 의견을 추가했습니다.
mgild

nitpicky하려면, 가정 up 4하는 것과 실제로 같지 않습니까? cd /some/dir/$PWD = "/some/dir/that/is/deeply/nested/"
snapfractalpop

2

정확히 원하는 것을 요구하지는 않지만 pushdand를 조사해야합니다 popd. cd...별칭 보다 폴더 탐색에 훨씬 더 유용합니다.

몇 개의 고정 영역에서 앞뒤로 이동하는 경우 일반적으로 별칭이 있습니다.

alias proj1='cd /some/dir/containing/proj1'
alias proj2='cd /some/deeper/dir/structure/containing/proj2'

1

별명을 사용하는 대신 다음 bash 함수를 사용할 수도 있습니다.

function mcd() {
  up=""

  for ((i=1; i<=$1;i++)); do
    up="${up}../"
  done

  cd $up
}

(또는 한 라이너 : function mcd() { up=""; for ((i=1; i<=$1;i++)); do up="${up}../"; done; cd $up; })

이것을 ~/.bashrc파일에 추가하면 터미널에서 파일을 사용할 수 있으며 ../../../../../../호출하기 전에 문자열 을 작성하면 시작 디렉토리로 다시 이동할 cd수 있습니다 cd -.

보다 유용한 구현에는 사용자 입력 검사도 포함될 수 있습니다.

function mcd() {
    if [[ $1 -lt 1 ]]; then
        echo "Only positive integer values larger than 1 are allowed!" >&2
        echo -e "\n\tUsage:\n\t======\n\n\t\t# to go up 10 levels in your directory\n\t\tmcd 10\n\n\t\t# to go up just 2 levels\n\t\tmcd 2\n" >&2
        return 1;
    fi  

    up=""

    for ((i=1; i<=$1;i++)); do
        up="${up}../"
    done

    cd $up
}


0

거의 사용되지 않는 환경 매개 변수를 사용해보십시오. CDPATH . 그런 다음 레벨을 명시 적으로 설정하지 않아도됩니다.

예:

$ find workspace -type d
workspace
workspace/project1
workspace/project1/com
workspace/project1/com/java
workspace/project1/com/java/lang

$ CDPATH=".:~/workspace:~/workspace/project1:~/workspace/project1/com:~/workspace/project1/com/java:~/workspace/project1/com/java/lang"
$ cd com
$ pwd
~/workspace/project1/com

여러 프로젝트에서 작업하는 경우 CDPATH 설정을 프로젝트 특정 환경 파일로 만들 수 있습니다. 추가 자동화를 위해 심으로 트리거하십시오.

나는 밀고 터지는 경향이 있습니다. CDPATH를 사용하여 프로젝트의 하위 디렉토리가 아닌 프로젝트 트리 사이를 이동하는 경향이 있지만 현재는 큰 프로젝트가 아닌 작은 프로젝트를 많이 수행하고 있습니다. :)


0

이전에 대상 디렉토리에있는 경우 :

luna:/tmp % mkdir -p a/b/c/d
luna:/tmp % pwd
/tmp
luna:/tmp % cd a/b/c/d
luna:d % pwd
/tmp/a/b/c/d
luna:d % cd -
luna:/tmp % pwd
/tmp
luna:/tmp % 

0

DirB 살펴보기 . 다음과 같이 책갈피를 작성할 수있는 BASH 스크립트입니다.

운영

  • s 디렉토리 책갈피 저장
  • g 북마크 또는 명명 된 디렉토리로 이동
  • p 디렉토리에 북마크 / 디렉토리를 밀어 넣습니다.
  • r 저장된 북마크 제거
  • d 북마크 된 디렉토리 경로 표시
  • sl 디렉토리 책갈피 목록을 인쇄합니다

매우 간단하고 효과적입니다.


0

@Grigory의 답변에서 한 단계 더 나아가십시오.

function cd_up() {
if [ -z "$1" ]; then
    cd ..
else
    cd $(printf "%0.s../" $(seq 1 $1 ))
fi
}
alias 'cdd'='cd_up'

그건 :

// go up 1 directory level 
$cdd

// go up 3 directory level 
$cdd 3

0

이 똑같은 문제에 시달리고 결과적으로 cd-plus 를 작성하게 되었습니다. 여러 디렉토리를 cd 할 수있는 단일 파일 CLI 유틸리티.

용법

echo `pwd` # /foo/bar/foobar/baz/foobaz/bazfoo
d baz

echo `pwd` # /foo/bar/

0

아래 코드를 추가하면 3 개의 더하기 점 표기법을 준수하도록 완성 .bashrc이 연장 cd됩니다.

_cd_dot_expansion() {
    local path="${COMP_WORDS[COMP_CWORD]}"

    if [[ "${path}" =~ ^\.{3,} ]]; then
        local dots="${BASH_REMATCH}"
        local levels="${#dots}"
        local tail="${path##*...}"
        local expanded_dots='..'

        # the loop starts at two because the first set of dots is
        # assigned to `expanded_dots` when it is initialized
        for (( i = 2; i < "${levels}"; i++ )); do
            expanded_dots+='/..'
        done

        path="${expanded_dots}${tail}"
        COMPREPLY=( $( compgen -A file "${path}" ) )

        return
    fi

    _cd
}

complete -o nospace -F _cd_dot_expansion cd

이 스 니펫이 bash 쉘에서 실행되면 타자 cd .../및 타자 <TAB>는 경로를 완성하고 ../../예를 들어 두 레벨 위로 된 모든 디렉토리의 상대 경로를 나열합니다.

업데이트 : 위 코드에서 참조 된 메소드에 bash-completion액세스하려면 설치해야합니다 _cd. 대부분의 명령 행 패키지 관리자를 통해 설치 가능

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.