디렉토리를 자주 변경하는 경우 타이핑을 최소화하는 방법은 무엇입니까?


5

명령 행에서 다른 디렉토리를 쉽게 전환 할 수있는 좋은 Linux 명령은 무엇입니까?

자주 긴 이름을 가진 다른 디렉토리로 전환해야합니다 (예 :

cd foo/20100801-rev124-test2
ls 
cd ../20100801-rev124-test1
ls 
cd ../20100802-rev126-bar

일반적으로 탭 완성을 사용하므로 다음과 같습니다.

cd ../2010080<TAB>2<TAB>-rev12<TAB>6-<TAB>bar

그러나이 모든 이름들이 매우 유사하기 때문에 성가시다. 따라서 탭 완성은 실제로 많은 작업을 저장하지 않는다.

그런 상황에서 타이핑을 최소화하기 위해 어떤 트릭을 사용합니까?

BTW, 나는 사용한다. pushd 과 popd 때때로, 그러나 여기에서는 주어진 순서대로 디렉토리를 방문하지 않기 때문에별로 도움이되지 않을 것입니다.

최신 정보:

좋은 해결책은 대답을 수락했다. 내 다른 사람에게, 관련 질문 . 기본적으로 대안을 만드십시오. cd 명령:

function cd2 { select a in $1*; do cd $a; break; done }

가능한 모든 완료를 한 번에 나열합니다.

$ cd2 2010080
(1) 20100801-rev124-test2
(2) 20100801-rev124-test1
(3) 20100802-rev126-bar

번호를 입력하여 하나를 선택할 수 있습니다.


흠, 솔루션이 bash 스크립트 나 그와 비슷한 것을 필요로하지 않는다면.
— dehmann

책갈피 및 터미널 통합과 함께 좋은 파일 관리자를 사용하십시오. 별칭 ".."를 부모 dir로 이동하면 "cd .."를 입력 할 필요가 없습니다. 그리고 타이핑을 줄이기 위해 심볼릭 링크를 만드십시오.
— neoneye

@neoneye : 북마크와 터미널 통합이 가능한 파일 관리자가 좋습니다. 나는 아무 것도 찾을 수 없다. 링크가 있습니까?
— dehmann

1
나는 맥을 사용한다. 그러나 돌핀, 워커 등 리눅스에서 가장 많이 사용되는 파일 관리자가있다. 텍스트 모드에는 Midnight Commander가 있습니다.
— neoneye

alias rotd='pushd -0' 다음 사용 rotd 디렉토리 스택을 회전합니다.
— ctrl-alt-delor

답변:


3

그만큼 dirs -v 명령은 각 디렉토리 앞에 번호가있는 디렉토리 스택을 나열하고 pushd 명령을 사용하여 해당 디렉토리로 건너 뜁니다. 예를 들어, if dirs -v 변경하고자하는 디렉토리에 2 그 앞에 (즉, 목록의 세 번째 디렉토리), pushd +2 해당 디렉토리로 변경됩니다.

타이핑을 줄이기 위해 다음과 같은 별칭을 지정하여 명령을 단축 할 수 있습니다.

alias dv="dirs -v"
alias pd=pushd

2

와일드 카드를 사용할 수 있습니다.

cd ../*test1 or even cd *t1
cd ../2010*test2
cd ../*bar

그것들은 훨씬 더 유연하고 각기 다른 상황에 대한 스크립트를 계획 할 필요가 없습니다. 일단 익숙해지면 모든 종류의 디렉토리에 사용할 것입니다. 예 :

cd /e*/n*k will take you to /etc/network
cd /h* to /home

그들은 어디에서나 사용할 수 있습니다 ( ls 또한 물론 볼 수 있도록 필터링 할 수 있습니다)

배쉬 와일드 카드


glob가 일치하는 파일 패턴의 수에 따라 유용 할 수도 있고 그렇지 않을 수도 있습니다. 당신이 가지고 있다면 /hard_disk 그때 cd /h* 덜 유용합니다.
— Rich Homolka

물론 이러한 명령을 많이 사용하면 일치하는 항목을 빠르게 찾을 수 있으며 전체 타이핑보다 거의 항상 짧아서 링크에서 다른 와일드 카드를 사용할 수 있습니다. 귀하의 예에서는 cd /ho* 그리고 예 ... 나는 이것이 최고가 아님을 동의합니다! :) 그러나 이것은 그의 디렉토리 이름이 길기 때문에 훨씬 더 예외이며 OP의 경우는 아닙니다.
— laurent

1
  1. hist 명령을 사용하여 실행 한 모든 명령의 내역을 가져 오십시오.
  2. 자주 cd 할 각 디렉토리에 대해 cd 명령을 사용하여 쉘 스크립트를 작성하십시오.

1
  • 탭 완료
  • 히스토리 액세스 (특히 화살표 키 액세스를 제공하는 셸에서)
  • bash에서는 popd 과 pushd

감사! 어떤 쉘이 화살표 키 액세스를 제공합니까?
— dehmann

1
Bash, tcsh. 어쩌면 zsh. 아마 다른 것. 시도해보기 만하면됩니다. 그래도 문제가 해결되지 않으면 설명서를 확인하십시오. "history"를 검색하고 가능하면 "readline"을 검색하십시오.
— dmckee

오, 당신은 이전 명령을 화살표 키로 접근하는 것을 의미합니다. 좋아, 나는 bash에서 그것을 사용하고있다. 화살표 키를 사용하여 탭 완성 후보자 중 한 명에 액세스하는 것을 의미한다고 생각했습니다.
— dehmann

1
새로운 충분한 bashes는 다음과 같은 다른 readline 기능을 지원합니다. C-r 증분 이력 검색. 모든 쉘이 다르므로 문서는 친구입니다.
— dmckee

1
나는 bash를 수년간 사용 해왔고 단지 발견했다. C-r 지난 몇 개월 동안 멋진 일입니다.
— Doug Harris

1

이런 질문에서, 나는 당신이 사용하는 쉘을 언급하는 것을 말하고 싶습니다. 각 쉘에는 약간 다른 도구가 있습니다. 여기 내 대답은 bash에 적용됩니다. 아마 사용.

또한, 'Frank Computer'에게 쉘 스크립트를 사용할 수 없으며, 자체 프로세스를 생성하고, 그 프로세스에서 cd를 종료하고, 현재 쉘이 여전히 사용자의 위치에 있습니다.

나는 '별칭'이 당신의 친구라고 생각합니다. 같은 것을 추가하십시오 :

alias CD_test2-'cd /absolute/path/to/foo/20100801-rev124-test2'

.bashrc (또는 .kshrc 또는 zshrc)

bash에는 env var도 있습니다. CDPATH, 상대 경로로 cd'ing에 대한 앵커로 사용할 수 있습니다. 예 :

CDPATH=/usr:.; cd bin

거기에 /usr/bin 너를 거기두고, 그렇지 않다면 너를 넣어 라. ./bin. 이것은 아마도 도움이되지 않을 것입니다. 아마도이 작업을하기 위해서는 전체 하위 디렉토리를 입력해야 할 것입니다.

CDPATH=/root/to/all/testing/dirs:.; cd 20100801-rev124-test2

최소한 bash에서는 Methinks 별칭을 사용할 수 있습니다. zsh에는 더 나은 도구가있을 수 있습니다.


나는 스크립트가 여기있는 가장 좋은 방법이라고 생각하지 않지만 스크립트를 사용하여 소스 코드를 호출하면 디렉토리를 변경할 수있다. . my_cd_script 그리고 cd 명령을 입력하십시오.
— laurent

1

한밤중 사령관 ( mc )는 터미널 기반 (문자 모드) 파일 관리자입니다. 그것은 당신이 자주 사용하는 목록에 디렉토리를 추가하고 목록에서 그들을 선택하여 cd 할 수있는 핫 -리스트 기능을 가지고 있습니다. 또한 빠른 cd 기능을 가지고 있기 때문에 cd 명령을 입력 할 때 전체 디렉토리에 cd 명령을 입력 할 수 있습니다. mc 명령 행. 일반적인 파일 관리자 탐색을 수행 할 수도 있습니다.

또 다른 키 입력 보호기는 쉘의 CDPATH 변수 (대부분의 셸에서 사용할 수 있음).

CDPATH=/some/top/dir:/another/one
cd foo

"foo"가 현재 디렉토리에 존재하면, cd 너를 거기로 옮길거야. 그렇지 않은 경우 디렉토리에서 다음을 검색합니다. CDPATH 거기서 찾은 첫 번째 "foo"로 이동합니다.


0

quickcd 많은 타이핑을 저장하여 디렉터리를 빠르게 바꿀 수있는 멋진 스크립트입니다.



0

anc는 해당 사용 사례를 위해 정확하게 설계되었습니다.

https://github.com/tobimensch/anc

다음은 README.md에서 발췌 한 내용입니다.

예 :     # 현재 디렉토리를 기본 앵커로 만듭니다.     $ anc s

# go to /etc, then /, then /usr/local and then back to the default anchor:
$ cd /etc; cd ..; cd usr/local; anc

# go back to /usr/local :
$ anc b

# add another anchor:
$ anc a $HOME/test

# view the list of anchors (the default one has the asterisk):
$ anc l
(0) /path/to/first/anchor *
(1) /home/usr/test

# jump to the anchor we just added:
# by using its anchor number
$ anc 1
# or by jumping to the last anchor in the list
$ anc -1

# add multiple anchors:
$ anc a $HOME/projects/first $HOME/projects/second $HOME/documents/first

# use text matching to jump to $HOME/projects/first
$ anc pro fir

# use text matching to jump to $HOME/documents/first
$ anc doc fir

# add anchor and jump to it using an absolute path
$ anc /etc
# is the same as
$ anc a /etc; anc -1

# add anchor and jump to it using a relative path
$ anc ./X11 #note that "./" is required for relative paths
# is the same as
$ anc a X11; anc -1

# using wildcards you can add many anchors at once
$ anc a $HOME/projects/*

# use shell completion to see a list of matching anchors
# and select the one you want to jump to directly
$ anc pro[TAB]

전체 공개 : 저는 anc의 저자입니다.


0

나는 그것을 발견했다. cd - 특히 2 개의 디렉토리 사이를 오가며 많은 시간을 할애 할 때 타이핑이 크게 줄어 듭니다. cd - 이전 디렉토리로 변경됩니다.

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