위로 올라가지 않고 이전 디렉토리로 변경하려면 어떻게해야합니까?


214

나는 현재 나무에서 아주 멀리 떨어져 있고 뿌리에서 서로 전환되는 두 경로 사이를 오가며 많은 작업 시간을 보내고 있습니다. cd사용자가 마지막 디렉토리로 이동한다는 주장이 있다면 내 인생이 훨씬 쉬워 질 것 입니다.

즉, 내가있는 경우 :

/etc/foo/bar/baz/moo

다음을 입력하십시오.

cd /var/lib/fubarred_app/blargh/logs

전체 경로를 다시 입력하지 않고 첫 번째 디렉토리로 돌아갈 수 있기를 원합니다.

각 위치에서 충분한 명령을 사용하기 때문에 메모리 키가 잘리지 않습니다. 되돌아 가서 원하는 경로를 직접 입력하는 것만 큼 찾기가 어렵습니다.

이전 디렉토리로 갈 수있는 짧은 명령이 있습니까?


8
@의뿐만 아니라 브라이언 "그냥 뭔가를 입력 할 수 있도록의 우수한 대답, 각 경로에 대한 별칭의 한 쌍을 만드는 것을 고려해볼 수 있습니다 bazmoo"또는 " blarghlog:) 프롬프트에서"
워렌

4
GNU 화면을 사용하지 않습니까?
Shi

2
어느 껍질? 그것은 큰 차이를 만듭니다.
Randal Schwartz

@warren ditto. 그것이 모든 것을하는 가장 좋은 방법입니다. 지금은 자신의 별명을 가지고 내가 내 컴퓨터를 사용의 절반 ... =)를
ixtmixilix

Fasd는 대단합니다. 확인 해봐.
majkinetor

답변:


301

명령

cd -

대부분의 주류 쉘에서 필요한 스왑을 수행합니다.

cd "$OLDPWD"

이전 작업 디렉토리가 포함 된 환경 변수를 사용합니다.


에 대한 POSIX man 페이지는cd 언급 :

기술

위 단계를 수행하는 동안 PWD 환경 변수가 변경되면 OLDPWD 환경 변수도 이전 작업 디렉토리 (cd를 호출하기 직전의 현재 작업 디렉토리)의 값으로 변경됩니다.

OPERANDS

  -   피연산자로 하이픈을 사용하는 경우 다음 명령과 같습니다.

cd "$OLDPWD" && pwd 

이전 작업 디렉토리로 변경 한 다음 이름을 씁니다.


7
이것은 실제로 사용중인 쉘에 달려 있으며, 지정하지 않았기 때문에 존재하지 않는 "휴대용"응답을 제공하기가 어렵습니다.
Randal Schwartz

16
@Randall, 아마도 모든 개별 쉘 주석을 하나의 Voltron-Shell 답변으로 결합 할 수 있습니다.
hyperslug

@ 랜달. 나는 bash를 사용하고 있었다. ksh 및 zsh에서도 작동합니다. 그건 그렇고, 나는 처음으로 1994 년 Learning Perl 판에서 프로그래밍하는 법을 배웠 으므로 팬보이가되는 동안 실례합니다. :)
Yitzchak

흠, 나는 cd $OLDPWD이것을 위해 사용 했다. 주류 쉘이 더 짧은 형태를 제공한다는 것이 좋습니다.
ulidtko

2
@sinni 특정 맛을 수행 해야 pushd하고, 적어도 그것의 내장입니다 bash.
slhck

105

bryan의 답변 외에도 스택과 같은 디렉토리를 빌드하는 pushd및 도 있습니다 popd. 이것은 Windows NT에서도 사용 가능합니다. 그러나 모든 쉘에서 사용 가능한 것은 아닙니다.

예를 들어, 우리는 세 개의 다른 디렉토리로 갈 수 있으며 호출 할 때 항상 스택을 볼 수 있습니다 pushd:

charon:~ werner$ pushd Documents/
~/Documents ~

charon:Documents werner$ pushd ../Movies/
~/Movies ~/Documents ~

charon:Movies werner$ pushd ../Downloads/
~/Downloads ~/Movies ~/Documents ~

그리고 popd연속으로 세 번 호출 하면 스택의 해당 디렉토리로 역순으로 이동합니다. 동시에 스택이 다시 비워집니다.

charon:Downloads werner$ popd
~/Movies ~/Documents ~

charon:Movies werner$ popd
~/Documents ~

charon:Documents werner$ popd
~

charon:~ werner$ popd
-bash: popd: directory stack empty

Zsh를 사용하는 경우; AUTO_PUSHD 옵션이 있으며이 옵션을 자동으로 cd스택에 푸시 합니다.


모든 쉘에서 push 및 popd를 사용할 수있는 것은 아닙니다.
Randal Schwartz

5
@ Wiesław : 정말? 나는 bash가 그랬 으면 좋겠다 ... 물론,에 대한 별칭 cd을 지정할 수 pushd있으며 대부분 동일합니다.
Chris Charabaruk

3
또는 별칭 pd를 푸시하고 둘 다 가지고 있습니다. BTW는 푸시 (또는 별명 인 경우 pd) 자체로 현재 디렉토리와 마지막으로 푸시 된 디렉토리를 교환하여 본질적으로 'cd-'의 기능을 수행합니다.
JRobert

나는 개념을 좋아하지만 결코 익숙해지지 않았습니다.
Thorbjørn Ravn Andersen

13

"점프"프로그램이 있습니다

  • 자동 점프 (기본 기능으로 유지 보수 됨)
  • j2 (일부 고급 기능으로 유지 관리되지 않음)
  • z (고급 기능이있는 "j"의 유지 보수 버전)

이를 통해 모든 종류의 디렉토리 탐색이 쉬워집니다. 경로의 일부를 제공하여 사용하면 작동합니다.

당신의 경우

~$ j baz 
/etc/foo/bar/baz/moo$

~$ j bla 
/var/lib/fubarred_app/blargh/logs$

이 프로그램에 원하는 문자를 지정할 수 있습니다. "j"는 전통입니다. :)

j2와 z는 여러 검색어를 지원합니다 ...

~$ j baz src
/home/me/projects/baz/repository/trunk/src$

... 그리고 더 많은 옵션.

~$ j -l  # list directories by "frecency"(frequency + recency) score
~$ j -r PATTERN # match by rank only, not recency
~$ j -t PATTERN # match by recency only, not rank

2
"j"는 분명히 쉘 특정입니다. 당신은 그렇게 말하지 않았습니다.
Randal Schwartz

3
@Randal : 어떻게 쉘에 특정합니까? 프로그램입니다.
Fixee

3
나는 바보입니다. :) 나는 지금 그것을 본다.
랜달 슈워츠

10

이외에 cd -cd $OLDPWD

이전에 입력 CTRL-Rcd명령 몇 글자를 누르고 입력하여 기록 검색을 사용할 수 있습니다 . CTRL-R반복해서 누르면 이전 경기가 나타납니다.

이 방법은 변경할 경로가 두 개 이상인 경우 더 유용합니다.


1
CTRL-R이 반드시 도움이되는 것은 아닙니다. / some / obscure / directory / deep에 있고 "cd evendeeperdir"을 수행 한 후 ~ / somehere / different로 이동했을 수 있습니다.
justintime

1
큰! 그것은 cd큰 도움이 아닌 다른 것들을 위해 작동합니다 !
Niloct

9

이것을 사용하여 디렉토리의 별칭을 쉽게 만들 수 있습니다.

a() { alias $1=cd\ $PWD; }

a 1

그리고 나중에 :

1

1
별명과 기능을 이해하는 쉘에서만. 모두가 아닙니다.
Randal Schwartz

그러면 alias =부품 입력을 생략 합니까? hmmmm
Xen2050

6

bashmarks를 사용 하면 일련의 폴더를 북마크하고 탭 완성으로 폴더 간을 이동할 수 있습니다.

폴더를 북마크하려면 해당 폴더로 이동 한 다음 다음과 같이 북마크하십시오.

bookmark foo

북마크 이름은 "foo"입니다. 해당 폴더로 돌아가려면 다음을 사용하십시오.

go foo

북마크 목록을 보려면

bookmarksshow

탭 완성 기능은 shoobie 북마크로 이동하기 만하면됩니다.

go sho[tab]

4

또 다른 가능성은 각 디렉토리에 하나씩 두 개의 창을 열어 두는 것입니다.


이전 명령을 정기적으로 사용 / 편집하면 공유 기록이 없습니다 (재설정을하면 재설정 될 수 있습니다 ...?)
Xen2050

@ Xen2050 share_historyzsh 의 쉘 옵션 을 참조하십시오 .
라돈 로스 버러

4

나는 이것이 귀하의 질문에 대한 대답을 엄격하게 말하는 것은 아니라는 것을 알고 있지만 중요한 디렉토리로 안내 하는 목표를 달성하는 데 도움이됩니다 .

하강 UNIX-bash에서는 CDPATH 를 사용 하여 cd 명령이 검색하는 폴더를 확장 할 수 있습니다 .

내 .bashrc 파일에서 :

export CDPATH='.:~/source/'

cd는 먼저 현재 폴더에서 검색 한 다음 코딩 프로젝트 디렉토리에서 검색합니다.

cd myproject

.. 내가 현재 서있는 곳에서 ~ / sources / myproject 로 이동합니다.

내 디렉토리 탐색에 많은 도움이 된 간단한 작은 기능.


1
+1 CDPATH 폴더를 cd자동 완성 (TAB) 목록에 추가합니다 . 그러나 이 경우에 .포함되지 않습니다 및 폴더가 함께 CDPATH 폴더에있을 경우 같은 이름의 현재 디렉토리의 하나로서, 다음 cd samenameCDPATH 디렉토리로 이동합니다 하지 나쁘다 현재 디렉토리의 하나. 사용할 필요가 cd ./samenameDUP 폴더에 들어가.
Xen2050

예, 좋은 의견입니다. 항상 첫 번째를 포함하십시오 . 또는 이상한 것들을 경험하게 될 것입니다.
phareim

3

그렇습니다 cd -.가는 길이지만 쉘에 전원이 부족하다는 점이 걱정됩니다. popdpushd도 좋은, 그 j것은 또한 좋아 보인다.

나는 내 자신의 유틸리티를 링에 넣을 것이다 ... 그것은 지난 10 년 동안 저와 함께 구축하고, 커스터마이징하고, 마이그레이션 해 왔던 것입니다.

내 디렉토리 관리 유틸리티에 대한 블로그 게시물

그것이 당신을 위해 작동한다면, 굉장하지만, 그렇지 않으면 나에게 약속하지 않으면 다른 것을 얻을 것입니다 :) 당신은 단순히 cd혼자서 살 수 없습니다 .


3

디렉토리가 2 개만 있다면 가장 쉬운 방법은

cd -

과거에 그런 것들을 겪었을 때, 내가 한 몇 가지 트릭이 있었는데 도움이 될 수 있습니다.

  1. .cshrc 파일에 다음과 같은 별칭 명령을 넣으십시오.

    alias moo /etc/foo/bar/baz/moo  
    alias logs cd /var/lib/fubarred_app/blargh/logs
    
  2. 내 홈 디렉토리에서 원하는 경로에 대한 바로 가기를 링크하십시오. 이것은 한 번입니다.

    cd ~
    ln -s /var/lib/fubarred_app/blargh/logs blargh
    ln -s /etc/foo/bar/baz/moo
    

이렇게하면 다음과 같이 쉽게 디렉토리를 변경할 수 있습니다.

   cd ~/moo
   cd ~/blargh

2

Autojump 는 bash / sh / zsh "cd"명령으로 사용자의 작업에서이 비디오를 참조하십시오 .

마지막 폴더를 배운 후에는 매끄럽게 이동할 수 있습니다.

j moo

2

나는 내 자신의 도구를 가지고 있지만 Dereks 도구를 살펴볼 것 j입니다.

물론 앞뒤로 점프하는 첫 번째 선택은

cd-

내 도구 locate는 사용 가능한 시스템에서 고유 한 이름을 가진 디렉토리 용입니다 . 일치하는 디렉토리 이름을 검색하고 첫 번째 일치 항목으로 이동합니다.

beam () 
{ 
    ldir=$(locate $1 | egrep "$1$" | head -n 1);
    if [[ -d $ldir ]]; then
        echo $ldir;
        cd $ldir;
    else
        echo "no directory "$ldir;
    fi
}

종속성 :

  • 위치하고 있다
  • grep
  • 머리

단점 :

  • 마지막 업데이트 된 b-run보다 새로운 디렉토리를 찾을 수 없습니다
  • 하나 이상의 디렉토리가 일치하면, 당신이 생각했던 디렉토리에 빛을 내는지 여부에 따라 운이 달라집니다.

개선 / 수정 :

  • 첫 번째 디렉토리를 선택하는 대신 선택 목록을 표시하도록 코드를 수정하여 사용자에게 1,2,3, ...을 입력하여 / bin, / usr / bin, / usr / local / bin으로 이동하도록 프롬프트 할 수 있습니다. ...

용법:

  • 편리한 방법으로 사용하려면 /etc/bash.bashrc 또는 ~ / .bashprofile에 함수를 넣으십시오.

내 솔루션의 장점 :

  • 같은 2 개의 디렉토리로 제한되지 않음 cd -
  • 빔을 사용하기 전에 디렉토리를 한 번 방문하지 않아도됩니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.