CLI를 통해 깊이 중첩 된 디렉토리로 빠르게 이동하는 방법은 무엇입니까?


16

cd <directory>디렉토리 를 사용 하면 디렉토리가 열린다 는 것을 알고 있습니다!

또한, cd .. 현재 작업 디렉토리에서 한 단계 위로 올라갑니다.

그러나 경로가 더 긴 중첩 된 디렉토리가 있으면 /home/thina/teams/td/tech/app/release/apks폴더로 이동하는 것이 피곤합니다.apks 하고 다른 노드로 돌아 가기가 어렵습니다 (here) /home/thina/teams.

cd및 의 입력을 건너 뛸 수있는 방법이 cd ..있습니까? 우분투 16.04를 사용하고 있습니다.


네! cd및 의 입력을 건너 뛸 수있는 방법이 cd ..있습니까?
gsthina

@GSURENDARTHINA 예를 들어 귀하의 경우와 같이 한 번에 여러 레벨을 한 번에 되돌려 최소 몇 번의 키 입력을 줄일 수 있다는 것을 알고 계실 것입니다.cd ../../../../..
underscore_d

2
심볼릭 링크가 옵션입니까?
포켓

1
문서 에서 CDPATH변수 를보고 싶을 수도 있습니다 bash.
chepner

모르는 경우 : 현재 작업중인 디렉토리의 모든 디렉토리에 대해 "cd <directory>"를 수행 할 수 있습니다. 슬래시로 시작하지 마십시오. 예를 들어, 작업 디렉토리가 현재 "/ home / thina / teams / td / tech / app / release"인 경우 "cd apks"를 입력하면됩니다.
jcadcell

답변:


30

pushdpopd:

pushd /home/thina/teams/td/tech/app/release/apks
# current directory now /home/thina/teams/td/tech/app/release/apks
popd
# current directory now what it was before pushd command

시도 help pushdhelp popd추가 옵션. 더 없습니다 man때문에 페이지, pushd그리고 popdbash는 내장되는 명령.


5
하지 않을까요 cd -같은 일을?
edwinksl

5
@edwinksl 네,하지만 pushdpopd하나 개 이상의 이전 경로를 기억할 수 있습니다.
Jos

8
/ 명령 dirs내에 디렉토리 스택을 나열하는 것을 잊지 마십시오 . pushdpopd
Arronical

4
이것들은 bash 내장 명령이기 때문에 bash-builtins (7) 매뉴얼 페이지에서 다룹니다. (또는 bash 에 대한 전체 매뉴얼 페이지에서도 찾을 수 있습니다. )와 동일한 정보 help pushd이며 help popd( 및) 언급 help dirs했지만 사람들이 이러한 명령의 출처를 궁금해하는 경우를 언급했습니다.
MT

2
@Jos 당신이 철자를 잘못help pusdh
Sergiy Kolodyazhnyy

16

이미 제공된 아주 좋은 답변 외에도 cd효과적인 사용법에 대한 몇 가지 팁이 있습니다 .

  • cd - 마지막 디렉토리로 돌아갑니다.
  • cd ../../.. 한 번에 3 단계 위로 올라갑니다. .. 체인으로 연결된 표기법을 만큼 많은 디렉토리를 '이동'할 수 있습니다.
  • 몇 번이나 올라갈 지 잘 모르겠다면 cd .. 을 사용하고 화살표 키를 위로 눌러 bash history를 사용하여 명령을 다시 사용하십시오.
  • ~사용자 thina로 로그인 한 경우 현재 사용자 홈 디렉토리에 서서 사용 cd ~/teams하여/home/thina/teams
  • 경로에 대해 Bash 자동 완성을 사용하면 탭 키가 경로의 섹션을 완성합니다. cd 명령 . 경로 세그먼트의 일부를 입력 한 다음 뒤에 Tab다른 세그먼트를 선택하지 않으면 해당 세그먼트가 완료됩니다. 예를 들어, 입력 한 cd /home/thina/teams/td/t다음을 누른 Tab경우 t 문자로 시작하는 td 디렉토리에 다른 파일이나 디렉토리가 문자 t로 시작하지 않는 한 tech라는 단어가 자동으로 채워집니다.

이 팁을 함께 사용하면 디렉토리 이동이 cd훨씬 덜 어려워 질 수 있습니다 .


2
~특히 루트 인 경우 에 지점을 추가하면 홈 디렉토리 ~user로 빠르게 이동할 수 있습니다 user.
CVn

고마워, 나는 그것을 몰랐다, 나는 다음 편집에서 그것을 추가 할 것이다.
Arronical

9

트리에서 한 번에 여러 레벨로 올라가려면 다음 기능을 사용할 수 있습니다 (향상된 버전의 경우 muru 덕분에).

up ()
{
    local old="$PWD"
    for i in $(seq "${1:-1}"); do
        cd ..
    done
    OLDPWD="$old"
}

그럼 당신은 할 수 있습니다 :

$ pwd
/home/thina/teams/td/tech/app/release/apks
$ up 5
cd'ing into /home/thina/teams

또한 :

  • up인수없이 호출 하는 것은 설정시 대체 하는 것으로 cd ..인해${1:-1}$11 달리
  • 마지막 이후 OLDPWD 설정 cd ..은 일반적인 cd -동작 을 유지하는 것을 목표로합니다 .

1
기술적으로 이것은 별명이 아닌 함수입니다.
Reinier Post

@ReinierPost : 충분합니다! 그에 따라 수정했습니다.
parras

2
제안 : -gt대신 >. >사전 식이며 문자열로 비교됩니다. 또한 경로를 만드는 대신 cd ..루프를 사용 하지 않는 이유는 for i in $(seq "${1:-1}"); cd ..; done무엇입니까? 그것은 if조건도 제거 할 수 있습니다.
muru

@muru 나는 ​​당신의 gt발언에 동의 하지만, 두 번째 제안에 관해서는 답변의 마지막 글 머리 기호를 참조하십시오. 이해가 되네요
Oliphaunt-모니카

1
특히 어렵지 않은 @Oliphaunt, 당신 OLDPWD은 원래 경로로 설정 했습니다. 전체 버전은 다음과 같습니다. paste.ubuntu.com/17990874
muru

7

긴 디렉토리 이름의 경우 전체 경로가있는 변수를 사용하십시오. 예를 들어

APKS="/home/thina/teams/td/tech/app/release/apks"

그럼 당신은 할 수 있습니다 cd "$APKS"

x 개의 디렉토리 수를 올리려면이 함수를 정의하십시오. .bashrc

goup() # go up x number of dirs
{
  num=$1
  while [ $num -ne 0  ];do
    cd ..
    num=$( expr $num - 1   )
  done
}

당신 /home/thina/teams에게서 돌아 오려면apks

goup  6

사용 예는 다음과 같습니다.

$> pwd
/sys/class/backlight/intel_backlight
$> goup 3
$> pwd
/sys
$> 

내가 생각해 냈지만 결코 많이 사용하지 않은 또 다른 작은 기능은 bookmark기능입니다.

작동 방식은 다음과 같습니다. 현재 폴더를 일부 파일에 저장 한 다음 해당 파일의 줄 번호를 기준으로 특정 디렉토리로 CD를 넣을 수 있습니다. 예:

$> cd /etc/lightdm
$> bookmark
$> cat ~/.dirsbookmarks                                                                                                  
/home/xieerqi
/sys/class/backlight
/etc/lightdm
$> cd $( awk 'NR==2' ~/.dirsbookmarks  )                                                                                 
$> pwd
/sys/class/backlight

그리고 여기 함수 자체가 있습니다 :

bookmark()
{ # bookmarks current dir
  pwd >> $HOME/.dirsbookmarks
}

5

업데이트 : 보다 강력한 도구가 있습니다 autojump.fasd ,하지만 난 그것을 잘 알고 아닙니다.


아무도 언급하지 않은 것에 놀랐습니다 autojump아직 하지 않은

명령 행에서 가장 많이 사용하는 디렉토리의 데이터베이스를 유지 보수하여 작동 합니다 (디렉토리로 이동하려면 먼저 디렉토리를 방문해야합니다).

기본적으로 @graipher가 몇 가지 추가 옵션을 사용하여 빌드 한 것입니다.

내가 언급했듯이다른 질문에 :

디렉토리에 몇 번 CD를 넣은 후 (한 번만해도) :

cd /home/thina/teams/td/tech/app/release/apks

j현재 디렉토리에 관계없이 바로 가기 를 사용하여 빠르게 이동할 수 있습니다 .

j apks

참고이 목록에서 가장 높은의 한으로, 경로 작품의 일부를 사용하는 것을 : j app또한 당신을 데려 갈 것이다 .../apks당신을보다가 번 더 가면.../app .

Ubuntu에 잘 배포되고 배포 되며 자식으로 이동 과 같은 다른 깔끔한 기능이 있기 때문에 자신의 스크립트를 사용하는 것이 좋습니다 .

.../td/tech $ jc apk
.../release/apks $ 

당신을 이동 apkstd보다는 다른, apks다른 나무 아래.


'fasd'에 +1 정말 유용합니다.
토마스

4

별명

별칭을 통해 직접 사용할 수있는 자주 사용하는 디렉토리 목록이 있습니다. 계층 구조의 디렉토리에 대한 바로 가기도 포함됩니다.

alias ..='cd ..'
alias ...='cd ../..'
alias ....='cd ../../..'
alias .....='cd ../../../..'
alias cdwork=/home/knub/Repositories/work
alias cduni=/home/knub/University

이제 3 단계 위로 올라가고 싶을 때는 입력 만하면됩니다 ....<Enter>.


처음에는 "3 단계에 4 시간 흠 ..."이라고 생각했지만 "오 그래 ... 컴퓨터! 0 , 1, 2, 3!" : D 기억하기 쉽고, 유용하며, 함께 연주 할 내용도 있습니다. 건배!
P Smith


4

입력 할 필요가 없도록 autocd옵션 ( shopt -s autocd)을 켜십시오 cd. 예를 들어 두 문자 명령 만 있으면됩니다... 상위 디렉토리로 이동 만 있으면됩니다.

두 디렉토리를 탐색하는 경우을 사용하여 두 디렉토리 사이를 전환 cd -하여 이전 작업 디렉토리로 이동할 수 있습니다 . 이 autocd옵션은 -실행 되지 않지만 cd -별명이나 기능을 정의 할 수 있습니다.

당신은 내장 명령과 스택에 디렉토리를 기억할 수 pushdpopd. 내장 dirs에는 디렉토리 스택이 나열되어 있습니다 ( dirs -v더 읽기 쉽습니다).

특정 디렉토리의 서브 디렉토리로 자주 변경하고이 서브 디렉토리의 이름이 다소 고유 한 경우 CDPATH변수에 추가 하십시오. 그러나 CDPATH실제로 편리한 상황을 찾지 못했습니다 .

변수를 디렉토리 이름으로 설정 한 다음을 사용하여 변경할 수 있습니다 $foo.

Zsh zsh 설치 에는 bash에없는 몇 가지 멋진 기능이 있습니다. 그들 중 일부는 동일한 작업을 수행하는 함수를 작성하여 에뮬레이션 할 수 있습니다. 특히, 두 개의 인수 형식을 cd사용하면 유사한 이름을 가진 다른 디렉토리 (예 : from /home/thina/teams/td/tech/app/release/apks/com.acme/v1, running cd release betagoes to)로 편리하게 변경할 수 있습니다 /home/thina/teams/td/tech/app/beta/apks/com.acme/v1.


2

UnixSE 에 대한 관련 질문에 이미 답변 했으므로 z [github] 라는 스크립트를 사용합니다 .

CD를 넣은 디렉토리를 기억하고 빈도 (빈도 + 최근 성)에 따라 순위를 매기고 이름의 일부를 사용하여 기억 된 경로 중 하나로 변경할 수 있습니다.

한 번 이상 디렉토리에 cd 한 후 다음 대신에 다음을 수행 할 수 있습니다.

$ cd ~user/very/long/path/with/many/subfolders/

그냥 해:

$ z sub

부분 이름 일치를 사용하여 작동합니다 (경로에 하위라는 용어가 포함되어 있고 더 높은 빈도를 갖는 다른 디렉토리가 없다고 가정).

또한 다음과 같은 함수를 정의했습니다.이 함수는 먼저 일반 cd를 시도하고 실패하면 z를 사용합니다.

function cd() {
    builtin cd "$1" 2> /dev/null || z "$1" || (echo "cd: File or Directory not found: $1" >&2 && exit 1)
}

이것은 당신에게 둘 다의 최고를 제공합니다. 폴더가 현재 디렉토리에 있거나 유효한 전체 경로가 제공되면 CD 만 있으면되지만 그렇지 않은 경우 데이터베이스에서 일치하는 것을 찾고 CD를 찾습니다. 이로 인해 때때로 cd (데이터베이스를 훈련하고 이전에는 없었던 폴더로 이동)를 사용하고 적용 가능한 경우 z를 사용하는 것을 기억해야하는 (작은) 고통을 없애줍니다.


이 디렉토리가 자주 방문하는 디렉토리의 데이터베이스를 구축하는 cd방법을 방해하지 z않습니까?
leftaroundabout

어떻게 다른 autojump가요?
Ciprian Tomoiagă

@leftaroundabout : 확실하지는 않지만 지금까지 잘 작동했습니다. z는 내장 CD (내 설정이 먼저 시도)를 사용할 때마다 데이터베이스를 확실히 빌드합니다. 그러나 z 부분을 사용할 때 데이터베이스가 업데이트되는지 확실하지 않습니다. 편집 : $ 내장 cd ~ / folder / i / have / not / been / to / yet /를 수행 할 때 데이터베이스가 업데이트되었는지 여부를 테스트했습니다. 그것은.
Graipher

1
@CiprianTomoiaga 사실, 기본적으로 같은 일을하는 것 같습니다. 내가 사용하는 cd 명령을 덮어 쓸 수도 있습니다. 자동 완성의 다른 명령은 흥미로워 보입니다!
Graipher

btw : z의 저자는 아닙니다. 매우 유용합니다.
Graipher

1

내가 잘 작동하는 세 가지 옵션이 더 있습니다 (나중에 pushd더 많이 사용할 수는 있지만 그에 대해서만 배웠습니다).

  • cd처음에는 깊게 중첩 된 디렉토리에 넣을 필요가 없도록 경로를 배열하십시오 . 따라서 자주 방문 해야하는 위치가 손끝에 있습니다. 이를 달성하는 방법은 심볼릭 링크를 사용하는 것입니다. 명시적이고 체계적으로 구성된 디렉토리를 그대로 유지하지만 자신의 편의를 위해 빠른 액세스 링크를 만드십시오.

    ln -s ~/teams/td/tech/app/release/apks ~/apks

    그리고 대신에 긴 경로 입력하는 cd바로 사용 cd ~/apks등을 cd ../teams(즉, 예를 들어보다 더 낫다에, 또는, ~/teams) 다시 얻을 수 있습니다.

  • 단일 쉘을 사용하지 않고 경로간에 CD를주고받지 말고 작업해야하는 각 경로에 대해 하나의 쉘을 계속 실행하십시오.이 멀티 태스킹을 달성하기위한 여러 레벨이 있습니다.

    • 여러 개의 터미널 창을 사용하십시오. 창이 다른 작업 공간 에있는 경우 가장 잘 작동합니다 .
    • 단일 창에서 여러 탭을 사용하십시오. 이것은 일부 디렉토리에서 몇 가지 명령을 수행하는 데 특히 적합합니다. 다시 돌아가려면 간단히 터미널 탭을 닫으십시오!
    • (실제로 합리적인 IMO는 아니지만 완전성을 위해) :와 같은 터미널 멀티플렉서를 사용하십시오 tmux.
    • cd폴더로 내려 가서 하나의 작업을 수행하고 원래 폴더에 대한 제어권을 즉시 돌려주는 단일 목적 명령으로 작업을 시작하십시오 .

      $ cd /home/thina/teams/td/tech/app/release/apks
      $ some_command this_file_here
      $ cd ../../../../..

      단순히 하나의 라이너를 수행

      $ (cd ~/teams/td/tech/app/release/apks; some_command this_file_here)

      또는 동등하게

      $ sh -c 'cd ~/teams/td/tech/app/release/apks
      > some_command this_file_here'
  • 하지 마십시오 cd 모두에서 , 단순히 홈 디렉토리에서 명령 권리를 실행합니다. 중괄호 확장 은 여기에서 많은 도움이 될 수 있습니다.

    $ cd /home/thina/teams/td/tech/app/release/apks
    $ some_command this_file_here other_file_also_apks
    $ cd ../../../../..

    넌 할 수있어

    $ some_command ~/teams/td/tech/app/release/apks/{this_file_here,other_file_also_apks}

pushd매우 유용합니다. 보다 나은 답변을 위해 사용 방법에 대한 정보를 추가 할 수 있습니다.
Sergiy Kolodyazhnyy 2016 년

@ Serg : 예, 그러나 위의 Jos의 대답 만 밀어 넣은 것을 알고 있습니다.
leftaroundabout

아, 알겠다 그렇다면 향후 답변에 유용 할 것입니다.
Sergiy Kolodyazhnyy 2016 년

1

밀고 터짐

명령 pushdpopd내 즐겨 찾기입니다. 이 pushd명령은 방문한 디렉토리를 기억하고 명령으로 볼 수 있으며 dirs뒤로 이동할 준비가되면 popd되돌아 가기 위해 사용 합니다.

bash 함수와 별명을 사용하는 예는 다음과 같습니다.

sd ()
{
    pushd "$1" > /dev/null
}

po ()
{
    popd
}

alias d='dirs'

나는 다양한 방법으로 이러한 명령을 혼합하여 지속적으로 사용합니다.

별명

자주 액세스하는 디렉토리의 또 다른 옵션은 단순히 cd또는 pushd명령의 별명을 지정하는 것 입니다. 따라서 게시물의 예제를 사용하십시오.

alias cdapks='cd /home/thina/teams/td/tech/app/release/apks'
alias cdteams='cd /home/thina/teams'

콤비네이션

두 가지 아이디어를 결합하면 다음과 같은 결과를 얻을 수도 있습니다.

alias sdapks='sd /home/thina/teams/td/tech/app/release/apks'
alias sdteams='sd /home/thina/teams'

그러면 디렉토리 탐색에 많은 유연성을 제공합니다. 나는 유지 cd***sd***같은 것들에 대한 손에 별칭을 Desktop, Documents, Music, Downloads, 등 그리고 그것은 매우 편리합니다!


1

z.lua- 습관을 익혀 더 빠르게 탐색 할 수있는 새로운 cd 명령을 사용해보십시오 .

  • 디렉토리에 cd는 foo를 포함합니다 :

    z foo
  • 디렉토리의 cd는 foo로 끝납니다.

    z foo$
  • 여러 인수를 사용하십시오.

    다음 데이터베이스를 가정합니다.

    10   /home/user/work/inbox
    30   /home/user/mail/inbox

    "z in"에겠습니까 CD를 /home/user/mail/inbox더 높은 가중치 항목으로. 그러나 z.lua에 여러 인수를 전달하여 다른 항목을 선호 할 수 있습니다. 위의 예에서 "z w in"디렉토리를로 변경하십시오 /home/user/work/inbox.

  • 대화식 선택 CD :

    일치하는 항목이 여러 개인 경우를 사용 z -i하면 목록이 표시됩니다.

    $ z -i soft
    3:  0.25        /home/data/software
    2:  3.75        /home/skywind/tmp/comma/software
    1:  21          /home/skywind/software
    > {CURSOR}

    그런 다음 숫자를 입력하고 실제 CD 이전에 갈 곳을 선택할 수 있습니다. 예. cd를 입력하려면 3을 입력하십시오 /home/data/software. Enter 키를 누르고 아무 것도 입력하지 않으면 종료되어 현재 위치에 유지됩니다.

    z.luafzf대화식 선택 또는 인수 완성도 지원합니다 .

    fzf로 완성

  • 입력하지 않고 부모로 빠르게 돌아갑니다 cd ../../...

    새로운 옵션 "-b"은 "cd ../../ .."를 중복 입력하는 대신 bash의 특정 상위 디렉토리로 빠르게 되돌아 갈 수 있습니다.

    • (인수 없음) : cd프로젝트 루트에 프로젝트 루트는 .git/ .hg/ .svn가 있는 가장 가까운 상위 디렉토리입니다 .

    • (하나의 인수) : cd키워드로 시작하는 가장 가까운 부모로, 찾을 수 없으면 키워드를 포함하는 부모로 이동하십시오.

    • (두 개의 인수) : 첫 번째 값을 두 번째 값 (현재 경로에서)으로 바꿉니다.

    ...

    에 대한 별칭 z -b으로 시작합시다 zb.

    # go all the way up to the project root (in this case, the one that has .git in it)
    ~/github/lorem/src/public$ zb
      => cd ~/github/lorem
    
    # cd into to the first parent directory named g*
    ~/github/vimium/src/public$ zb g
      => cd ~/github
    
    # substitute jekyll with ghost
    ~/github/jekyll/test$ zb jekyll ghost
      => cd ~/github/ghost/test

그것이 당신의 필요에 맞길 바랍니다.


0

물고기는 빠르게 움직일 수있는 몇 가지 훌륭한 시설을 갖추고 있습니다.

  • cd right-arrow enter를 입력하면 가장 최근의 cd가 반복됩니다.
  • cd 위쪽 화살표 오른쪽 화살표 enter를 사용하여 가장 최근의 두 번째 cd를 반복합니다.
  • 기타.
  • 그것은 prevd와 nextd를 가지고 있으며, 종종 밀고 터지는 것보다 사용하기가 더 쉽습니다.

또한, 내가 좋아하는 디렉토리를 ~ / f에 링크 된 상태로 유지하므로 ~ / f / x를 cd하여 ~ / foo / bar / baz / experimental-data에 도달 할 수 있습니다.


0

자주 액세스하는 디렉토리에 별명을 사용했습니다.

또한 ccb라는 bash 함수가 있습니다 (cd bat 파일 작성의 약어-.bat 쉘 스크립트 ccb.bat가 현재 디렉토리로 점프하기 위해 다른 .bat 파일을 작성하는 dos / windows에서 시작되었습니다). (.bash_aliases 파일에서) 현재 디렉토리로.

예 : $ ccb myfav는 .bash_aliases 파일에 별명 myfav를 사용하여 현재 디렉토리에 별명을 작성하고 .bashrc 파일을 소싱하여 별명을 즉시 사용할 수있게합니다.

방금 새로운 솔루션을 찾았습니다. bash 함수입니다.

## USAGE : lj <your_dir>
### lj -- short for LongJump -- (kinda similar to a C function which would jump to an address outside of your current function)
function lj() {
        pushd `find . -type d -name $1 -print | head -n 1`
}

$ lj deeply_nested_dir_name

이것은 이전 사용법에서 아무것도 배울 필요가 없습니다. 서브 디렉토리 트리에 "deeply_nested_dir_name"이라는 이름의 디렉토리가 두 개 이상 있으면 find에서 찾은 디렉토리의 첫 번째 디렉토리로 이동합니다.

또한이 솔루션은 다른 디렉토리 트리로 이동할 수 없습니다.

하드 코딩 된 별칭과 생성 된 별칭 과이 새로운 lj () 함수 사이에서 대부분의 요구가 처리됩니다.

사용하려는 모든 사람을위한 내 ccb () bash 함수는 다음과 같습니다.

function ccb() {
        foo=$PWD
        echo "" >> ~/.bash_aliases
        echo "alias $1='pushd $foo > /dev/null'" >> ~/.bash_aliases
        source ~/.bashrc
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.