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


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, 나는 사용한다. pushdpopd 때때로, 그러나 여기에서는 주어진 순서대로 디렉토리를 방문하지 않기 때문에별로 도움이되지 않을 것입니다.

최신 정보:

좋은 해결책은 대답을 수락했다. 내 다른 사람에게, 관련 질문 . 기본적으로 대안을 만드십시오. 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에서는 popdpushd

감사! 어떤 쉘이 화살표 키 액세스를 제공합니까?
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.