완전히 관련이없는 경로 (예 : /Project/Warnest/docs/
및 ~/Dropbox/Projects/ds/test/
) 사이에서 자주 전환하고 싶습니다.
하지만 항상 cd /[full-path]/
를 입력하고 싶지 않습니다. 이전에 작동 한 디렉토리로 전환하기위한 바로 가기 명령이 있습니까?
내가 생각할 수있는 한 가지 해결책은 환경 변수를 자주 사용하는 디렉토리의 bash
.profile
에 추가하고 해당 변수를 사용하여 cd
에 추가하는 것입니다.
그러나 이것에 대한 다른 해결책이 있습니까?
두 디렉토리 사이를 전환하는 경우 cd -
앞뒤로 이동합니다.
CDPATH
의 쉘 변수 bash
와 ksh
의 cdpath
및 zsh
이 있습니다.
CDPATH The search path for the cd command. This is a colon-separated list of directories in which the Shell looks for destination directories specified by the cd command.
~/.bashrc에서 설정할 수 있습니다.
export CDPATH=/Project/Warnest:~/Dropbox/Projects/ds
그런 다음 cd docs
및 cd test
는 처음 찾은 해당 디렉토리로 이동합니다. (같은 이름의 디렉토리가 현재 디렉토리에 존재하더라도 CDPATH
은 계속 참조됩니다. CDPATH
에 지정된 이름의 하위 디렉토리가있는 디렉토리가 더 있으면 하나가 사용됩니다.)
다른 시도는 autojump 라는 도구입니다. 별칭 데이터베이스 (기본적으로 j
)에 대한 호출 데이터베이스를 유지하고 가고 싶은 곳에 대한 현명한 결정을 시도합니다. 예를 들어 자주 입력하는 경우 :
j ~/Pictures
다음을 사용하여 핀치 할 수 있습니다.
j Pic
데비안과 우분투에서 사용할 수 있으며 ~/.bashrc
또는 ~/.zshrc
기본적으로.
디렉토리 수가 적 으면 pushd
를 사용하여 디렉토리 사이를 회전 할 수 있습니다.
# starting point
$ pwd
/Project/Warnest/docs
# add second dir and change to it
$ pushd ~/Dropbox/Projects/ds/test
~/Dropbox/Projects/ds/test /Project/Warnest/docs
# prove we're in the right place
$ pwd
~/Dropbox/Projects/ds/test
# swap directories
$ pushd
/Project/Warnest/docs ~/Dropbox/Projects/ds/test
cd -
와 달리이 디렉토리를 둘 이상의 디렉토리에서 사용할 수 있습니다
Noach의 제안에 따라, 나는 이것을 사용하고 있습니다 :
function pd()
{
if [[ $# -ge 1 ]];
then
choice="$1"
else
dirs -v
echo -n "? "
read choice
fi
if [[ -n $choice ]];
then
declare -i cnum="$choice"
if [[ $cnum != $choice ]];
then #choice is not numeric
choice=$(dirs -v | grep $choice | tail -1 | awk '{print $1}')
cnum="$choice"
if [[ -z $choice || $cnum != $choice ]];
then
echo "$choice not found"
return
fi
fi
choice="+$choice"
fi
pushd $choice
}
사용법 예 :
# same as pushd +1
$ pd 1
# show a Prompt, choose by number
$ pd
0 ~/Dropbox/Projects/ds/test
1 /Project/Warnest/docs
2 /tmp
? 2
/tmp ~/Dropbox/Projects/ds/test /Project/Warnest/docs
# or choose by substring match
$ pd
0 /tmp
1 ~/Dropbox/Projects/ds/test
2 /Project/Warnest/docs
? doc
/Project/Warnest/docs /tmp ~/Dropbox/Projects/ds/test
# substring without Prompt
$ pd test
~/Dropbox/Projects/ds/test /Project/Warnest/docs /tmp
분명히 이것은 스택을 통해 회전하기위한 것이며 새로운 경로 추가를 처리하지 않습니다. 어쩌면 이름을 바꿔야 할 수도 있습니다.
Bashrc에서 alias
를 사용하여 CD를 만듭니다.
예 :
alias wdoc='cd ~/Project/Warnest/docs'
alias dstest='cd ~/Dropbox/Projects/ds/test'
이 문제를 해결하는 스크립트 (일반적으로 acd_funch.sh)를 찾았습니다. 이것으로 cd --
를 사용하여 마지막으로 사용한 10 개의 디렉토리를 봅니다. 다음과 같이 보일 것입니다 :
0 ~/Documents/onedir
1 ~/Music/anotherdir
2 ~/Music/thirddir
3 ~/etc/etc
가기 위해 ~/Music/thirddir
그냥 cd -2
참고 : 이 스크립트는 원래 리눅스 공보 기사에 실 렸습니다 : acd_func.sh-bash의 CD를 확장하여, 방문한 디렉토리 이름의 표시 및 액세스 내역 .
"pushd -n"를 사용하십시오 (bash를 사용한다고 가정).
~/.bashrc에 추가하십시오.
pushd -n /Project/Warnest/docs/
pushd -n ~/Dropbox/Projects/ds/test/
그때,
cd ~
는 당신의 집입니다.
cd ~1
는 ~/Dropbox/Projects/ds/test/
입니다.
cd ~2
는 /Project/Warnest/docs/
입니다.
~1
와 같은 방식으로 ~2
, ~
등을 사용할 수 있습니다.
Bash에서 cdable_vars
Shell 옵션을 사용해보십시오. shopt -s cdable_vars
로 켜십시오.
그런 다음 변수 export dir1=/some/path
를 설정해야합니다. 마지막으로 cd dir1
등을 입력하십시오. 그런 다음 ~/.bashrc
에 넣을 수 있습니다.
여기에는 좋은 제안이 많이 있습니다. 사용할 디렉토리는 작은 고정 디렉토리 목록이 있는지 또는보다 일반적인 솔루션을 찾고 있는지에 따라 다릅니다.
작은 고정 목록 인 경우 (Felix Yan이 제안한대로) 간단한 별칭을 설정하는 것이 가장 사용하기 쉽습니다.
보다 일반적인 솔루션 (예 : 시간이 지남에 따라 변경되는 많은 다른 디렉토리)을 찾고 있다면 푸시 및 팝을 사용합니다 (사용하지 않는 것이 좋습니다). 필자는 개인적으로 기본 푸시/팝을 사용하기가 어렵다는 것을 특히 발견했습니다. 특히 많은 폴더간에 전환을 시작할 때; 그러나 나는 그것을 훨씬 쉽게하기 위해 몇 가지 조정을 썼습니다. bashrc에 다음을 추가하십시오.
alias dirs='dirs -v'
pd ()
{
if [ -n "$1" ]; then
pushd "${1/#[0-9]*/+$1}";
else
pushd;
fi > /dev/null
}
pd
(더 짧은 형식의 pushd
)를 사용하여 현재 위치를 기억하여 새 폴더로 이동하십시오.dirs
를 사용하여 저장된 디렉토리 목록을보십시오.pd 3
디렉토리 번호 3으로 이동합니다.사용법 예 :
$ PS1='\w\$ ' ## just for demo purposes
~$ pd ~/Documents/data
~/Documents/data$ pd ../spec
~/Documents/spec$ pd ~/Dropbox/Public/
~/Dropbox/Public$ pd /tmp
/tmp$ pd /etc/defaults/
/etc/defaults$ dirs
0 /etc/defaults
1 /tmp
2 ~/Dropbox/Public
3 ~/Documents/spec
4 ~/Documents/data
5 ~
/etc/defaults$ pd 2
~/Dropbox/Public$ dirs
0 ~/Dropbox/Public
1 ~/Documents/spec
2 ~/Documents/data
3 ~
4 /etc/defaults
5 /tmp
~/Dropbox/Public$ pd 4
/etc/defaults$ dirs
0 /etc/defaults
1 /tmp
2 ~/Dropbox/Public
3 ~/Documents/spec
4 ~/Documents/data
5 ~
/etc/defaults$ pd 3
~/Documents/spec$ popd
~/Documents/data ~ /etc/defaults /tmp ~/Dropbox/Public
~/Documents/data$
j2 를 시도하는 것보다 더 나쁠 수 있습니다.
읽어보기에서 :
복잡한 디렉토리 트리에서 많은 시간을 보내십니까?
j는 사용자의 현재 위치와 시간을 추적하고 실제로 사용하는 디렉토리로 이동하는 편리한 방법을 제공합니다.
폭넓게 사용하고 추천합니다.
다음은 내가 테스트 한 사례에서 작동하는 것으로 보였으며 ~/Bookmarks에 디렉토리 이름을 심볼릭 링크로 삭제할 수 있습니다.
mkdir "$HOME/Bookmarks"
ln -s /tmp "$HOME/Bookmarks/testdir"
function ccd() { cd $(readlink "$HOME/Bookmarks/$1") ; }
ccd testdir && echo $PWD
# gives /tmp
필자의 경험에 따르면 셸 탐색에서 가장 빠른 속도는 기록 검색 기능을 사용하는 것입니다. Bash에서는 Ctrl
+ R
를 누르고 일부 패턴을 입력하여 명령 기록에서 뒤로 검색 할 수 있습니다. 그런 다음이 패턴은 히스토리의 이전 항목 (cd
명령 또는 기타 작업 일 수 있음)과 일치하며 입력시 제안 사항이 작성됩니다. 제안 된 명령을 다시 실행하려면 Enter 키를 누르십시오. 이것은 ... 불리운다 reverse-search-history
Bash에서 나는 그것을 좋아합니다. 그것은 많은 키 입력을 절약하고 내부 메모리를 절약합니다.
Drop
또는 Wa
와 같이 명령의 일부 작은 부분 만 기억하면 두 기록 항목 cd ~/Dropbox/Projects/ds/test/
및 cd /Project/Warnest/docs/
.
또한 이러한 별칭을 사용합니다 (~/.bashrc에 추가).
alias ..='cd ..'
alias ...='cd ../..'
alias ....='cd ../../..'
alias .....='cd ../../../..'
그것들과 함께 상위 디렉토리로 이동하는 것이 훨씬 빠릅니다 (그러나 탐색의 절반 만 해결하십시오).
zsh , 셸을 사용하여 디렉토리, 파일 및 대부분의 cli 프로그램에 대한 옵션에 대한 TAB 완성도를 높이는 것이 좋습니다.
나는 수년 동안 그 셸을 사용해 왔으며 기능이 사라지면 놓칠 것입니다. zsh를 스크립팅하는 것도 많은 도움이되며 매일 도움이 될 수있는 많은 one-liners 입니다.
zsh를 사용하는 경우 :
cd
를 입력 할 필요없이 디렉토리 경로 만 입력하십시오 (/foo/bar/baz<Enter>
는 cd /foo/bar/baz<Enter>
와 같습니다)
auto_cd
옵션을 설정해야합니다.
Tab
키를 사용하여 약식 경로를 확장 할 수 있습니다 (/u/sh/pi<Tab>
는 /usr/share/pixmaps
로 확장되며 파일 이름에도 적용됨)어쨌든 쉘에 전체 경로를 입력해서는 안됩니다. 당신은 항상 사용할 수 있습니다 :
soffice /P*/W*/*/mydoc*
대신에
soffice /Project/Warnest/docs/mydoc.odt
빠른 디렉토리 변경을위한 다소 멋진 도구가 있습니다.
xd-eXtra 빠른 디렉토리 체인저 http://xd-home.sourceforge.net/xdman.html
약간 어색한 점은 bash 프로파일로 매핑하거나 디렉토리 출력 과 비슷해야한다는 것입니다
# function to do `cd` using `xd`
# -g turns generalized directory search command processing on
# which improves the whole thing a bit
f()
{
cd `/usr/bin/xd -g $*`
}
당신은 다음과 같은 일을 할 수 있습니다 :
# change to /var/log/a* (gives you a list to choose from)
f vla
# to skip the list and go directly to /var/log/Apache2
f vlapach
cdargs는 디렉토리를 북마크하는 데 가장 효율적인 도구입니다. http://www.youtube.com/watch?v=uWB2FIQlzZg
나는 같은 질문을했고 처음에는 this answer 를 발견했습니다. 유틸리티 z ( https://github.com/rupa/z )를 설치했습니다.
Z는 cd 명령을 통해 배우고 frecency 원칙에 따라 디렉토리를 추적하기 때문에 정확하게 찾고 있습니다. . 따라서 두 cd 명령을 모두 한 번 수행하면 다음과 같은 작업을 수행 할 수 있습니다.
z docs
z ds
/Project/Warnest/docs/
및 ~/Dropbox/Projects/ds/test/
로 각각 이동합니다. z에 대한 인수는 정규 표현식이므로 전체 폴더 이름을 입력 할 필요조차 없습니다.
Update (2016) : 이제 FASD 를 사용하여 퍼지를 허용합니다 최신 디렉토리를 기반으로 검색하십시오.
Ruby에서이를위한 도구를 만들었습니다. YAML 파일을 사용하여 프로젝트를 선언 할 수 있습니다.
여기에 작은 기사를 썼습니다 : http://jrnv.nl/switching-projects-terminal-quickly/
또한 GitHub에 소스를 게시했습니다. https://github.com/jeroenvisser101/project-switcher
이것을 위해 특별히 만들어진 "wcd"앱도 있습니다 (cygwin에도 포팅되어 있습니다). 바로 가기, dirs의 책갈피를 만들 수 있습니다. 와일드 카드도 지원합니다./usr/share/wcd에서 매뉴얼 페이지와 문서를 읽으면 많은 도움이 될 것입니다.
Fastcd ( https://github.com/frazenshtein/fastcd ) 시도 bash에서 방문한 디렉토리를 기록하는 후크를 설정합니다. 그리고 스크립트를 "j"별명으로 설정합니다.이 별명은 마지막으로 방문한 디렉토리를 표시하고 신속하게 CD를 사용하여 디렉토리를 필터링하기 위해 입력을 시작합니다. "j"별명을 작성하려면 .bashrc를 수정해야합니다.
도구 구하기
cd ~; mkdir Soft; cd Soft
git clone https://github.com/frazenshtein/fastcd
필요한 모듈 설치
pip install --user urwid
Set.sh 파일을 bashrc에 소싱하십시오.
echo -e "\nsource /home/$USER/Soft/fastcd/set.sh\n" >> ~/.bashrc
그리고 bashrc를 업데이트하십시오.
source ~/.bashrc
그런 다음 콘솔에 "j"를 입력하십시오.
IEEE 1003.1 (POSIX)에 따라 OLDPWD
가 작업 디렉토리를 변경할 때마다 이전 작업 디렉토리로 업데이트해야하는 환경 변수 인 cd
도 있습니다 (호기심이 많은 디렉토리의 경우 80244 행) IEEE 1003.1-2008의 2506 페이지 중 하나).
나는 몇 년 동안 이것을 관리하기 위해 내 자신의 유틸리티 cdhist 를 사용하고 있습니다. cd 명령의 별명을 지정하고 디렉토리 스택을 자동으로 유지합니다.
export
를 사용하여 디렉토리 경로를 변수에 할당 한 다음 참조 할 수 있습니다.
export dir1=/Project/Warnest/docs/
export dir2= ~/Dropbox/Projects/ds/test/
cd $dir1
cd $dir2
anc
는 디렉토리의 북마크를 유지하는 cmd 줄 도구 (앵커의 줄임말)입니다. (지금까지는 bash로만 테스트)
귀하의 경우 :
anc a /Project/Warnest/docs/ ~/Dropbox/Projects/ds/test/
이것은 앵커 (책갈피 생각) 목록에 두 디렉토리를 모두 추가합니다
시스템 유형의 어느 곳에서나 /Project/Warnest/docs/
로 이동하려면 다음을 수행하십시오.
anc Warn
~/Dropbox/Projects/ds/test/
로 이동하려면 다음을 입력하십시오.
anc ds test
책갈피가 지정된 경로와 텍스트를 일치시키는 것 외에도 anc는 디렉토리를 뛰어 다니는 편리한 방법이 많이 있습니다.
anc i
모든 북마크를 숫자로 나열하는 대화식 모드를 시작하므로 숫자 만 입력하면됩니다.
입력하면 :
anc Pro[TAB]
모든 책갈피와 일치하는 목록 (두 경우 모두 책갈피)이 표시되고 화살표 키를 사용하여 선택할 수 있습니다. 이는 매우 빠르고 직관적 인 방법입니다.
프로젝트의 github 페이지에서 anc를 얻으십시오 : https://github.com/tobimensch/anc
사용법 예제와 함께 README)도 있습니다.
전체 공개 : 저는이 스크립트의 저자입니다. 일부 사람들이 유용하다고 생각합니다.
pushd
와 popd
은 (는) 예견이 필요하기 때문에 결코 좋아하지 않았습니다. 나사를 풀고, 마지막으로 몇 개의 디렉토리를 추적 한 다음 cd-to-old-dirs 함수로 사용할 수있게하자. 나는 그것을 cdo
라고 부릅니다. 이것을 rc 파일에 넣으십시오 (예 : ~/.bashrc
) :
function precmd() { __path_log; } # to install in zsh, harmless in bash
Prompt_COMMAND="__path_log" # to install in bash, harmless in zsh
# Populate the array DIRHIST with the last 8 dirs visited (not for direct use)
__path_log() {
local d dh first=true
if [ -d "$__DIRHIST" ] && [ "$__DIRHIST" != "$PWD" ]; then
# $__DIRHIST is the last dir we saw, but we miss foo in 'cd foo; cd bar'
# so we use $OLDPWD to catch it; so you'd need a THIRD change to fool us.
for d in "$__DIRHIST" "${DIRHIST[@]}"; do
if [ -n "$first" ]; then unset DIRHIST first; DIRHIST[1]="$OLDPWD"; fi
if [ "$OLDPWD" = "$d" ] || [ "$PWD" = "$d" ] || [ ! -d "$d" ]; then
continue
fi
dh=$((1+${#DIRHIST[@]}))
[ $dh -lt 9 ] && DIRHIST[$dh]="$d" # Push up to 8 directories
done
Elif [ -z "$__DIRHIST" ]; then
DIRHIST[1]="$OLDPWD"
fi
__DIRHIST="$PWD"
}
cdo() {
local d n=0
if [ -z "${DIRHIST[1]}" ] || [ -z "$1" ]; then
cd ${OLDPWD+"$OLDPWD"}
return $?
fi
case "$1" in
ls ) for d in "${DIRHIST[@]}"; do echo "$((n=n+1)) <$d>"; done \
|sed "s:<$HOME:<~:;s:</home/:<~:" |column \
|GREP_COLORS='ms=0;32' grep --color -e '\b[0-9] <' -e '>' ;;
[1-9]) cd "${DIRHIST[$1]}" ;;
* ) [ -d "$1" ] && cd "$1" || echo "Usage: cdo [NUM|ls]" >&2; return 2 ;;
esac
}
다음 예는 프롬프트 해시 디렉토리 달러 (# dir $
), 스택 오버플로에서 프롬프트가 회색으로 표시되므로 선택 :
# ~ $ cd /tmp
# /tmp $ cdo
# ~ $ cdo ls
1 </tmp>
# ~ $ cd /
# / $ cdo ls
1 </home/adam> 2 </tmp>
# / $ cdo
# ~ $ cdo ls
1 </> 2 </tmp>
# ~ $ cdo 2
# /tmp $ cd test
# /tmp/test $ cd ../test2
# /tmp/test2 $ cdo ls
1 </tmp/test> 3 </home/adam>
2 </tmp> 4 </>
# /tmp/test2 $ cdo 4
# / $ cd
# ~ $ cdo ls
1 </> 3 </tmp/test>
2 </tmp/test2> 4 </tmp>
다른 사람들이 저와 같은 일반적인 생각을 가지고 있다는 것을 보는 것이 정말 깔끔합니다 (내가 독창적이라고 생각했습니다!). @SamTroliman의 fastcd , @null xd 및 @phildobbin의 j2 에 대한 언급은 모두 매우 비슷합니다. 중복 질문 84445 도 참조하십시오. setopt auto_pushd
. 나는 여전히 내 자신의 코드를 선호하지만 ymmv.
필요한 것은 기본적으로 워크 플로를위한 프로젝트 파일 인 것 같습니다. 프로그래밍 IDE에서와 같이 활동에 속하는 디렉토리가 있습니다. Zsh Navigation Tools 및 n-cd
있습니다. 마지막으로 방문한 폴더를 탐색하고 선택한 디렉토리로 Hotlist
을 정의 할 수도 있습니다.
n-cd
는 다음과 같은 키 조합에 바인딩 될 수 있습니다.
zle -N znt-cd- 위젯
바인드 키 "^ T"znt-cd-widget
이 상황에서 사용하는 솔루션은 screen
입니다. 시작 화면에서 C-a c
를 사용하여 각 디렉토리에 대한 창을 작성하고 탐색하십시오. C-a n
또는 C-a p
를 사용하여 창/디렉토리를 변경하십시오. C-a A
로 창 이름을 지정하십시오. 그런 다음 C-a "
로 창 목록을 팝업하고 창 번호 또는 이름을 사용하여 탐색 할 수 있습니다. screen
이므로 세션에서 분리하여 작업 공간을 절약하고 나중에 동일한 설정으로 다시 연결할 수 있습니다.
여기에 몇 가지 제안이 있습니다.
가장 직접적인 아이디어는 .profile 파일에 별칭을 추가합니다.
vi ~/.profile
alias dir1='cd /myhome/onedir'
alias dir2='cd /jimmy/anotherdir'
그런 다음 $ dir1
또는 dir2
, cd 가능
항상 두 개의 디렉토리에서만 전환하는 경우. cd -
가 서로 전환됩니다.
나는 그것을 위해 스크립트를 작성했습니다. 다음은 Github의 링크 입니다.
다음은 사용법 예입니다.
먼저 pev 변수를 추가합시다 :
$ pev add longpath '/A/very/very/long/path/I/frequently/need' # output: # environment variable "pev_longpath" added successfully. "pev show" to see the list of pev variables.
이제 지금까지 정의 된 pev 변수 목록을 보자.
$ pev show # output: | NAMES VALUES | ---------- ---------- | pev_longpath "/A/very/very/long/path/I/frequently/need"
그런 다음 디렉토리를 변경하십시오.
$ cd $pev_longpath
또는 서브 디렉토리 중 하나에 무언가를 복사하십시오.
$ cp somefile $pev_longpath/and/deeper/than/that
실제로 pev 변수는 다른 환경 변수와 다르지 않으며 관리하기가 더 쉽습니다. Shell 스크립팅에 대한 경험이 많지 않으므로 오류를 알려주십시오. HTH.
귀하의 기준에 따라 ~/.bashrc
에서 자주 사용되는 각 경로에 대해 alias
을 정의하는 것이 좋습니다. 이 방법을 개인적으로 사용합니다.
alias taxes='cd /users/bob/documents/home/finances/taxes'
alias elvis='cd /dropbox/2016/files/music/elvis'
관련 질문 ( link )에 대해 언급했듯이 디렉토리 트리를 내려 가서 되돌아 가고 싶다면 ..
가 제가 가장 좋아하는 것입니다. .. 하나의 디렉토리로 이동하고 ../..
2 및 ../../..
3 등을 사용하여 트리의 분기 내에서 아주 쉽게 이동할 수 있습니다. cd ../../example
또는 cd ../../../example/example
등과 같은 동일한 명령. 디렉토리 간을 간단히 전환하려면 cd -
또는 $OLDPWD
가 가장 좋습니다.
Bash 및 zsh 터미널에서 빠른 디렉토리 탐색을위한 가장 좋은 해결책은 z-jump around 스크립트를 설치하는 것입니다. 이 필수 스크립트는 Google Chrome Devtools 개발자, Paul Irish)가 2013 Fluent keynote 에서 추천 한 것입니다.
DESCRIPTION 'frecency'를 기준으로 가장 많이 사용되는 디렉토리를 추적합니다.
짧은 학습 단계 후에 z는 명령 행에 주어진 모든 정규 표현식과 일치하는 가장 'frecent'디렉토리로 이동합니다.
예를 들어,
z foo bar
은/foo/bar와 일치하지만/bar/foo와는 일치하지 않습니다.[...]
Frecency는 '최근'과 '빈도'의 포트만 토입니다.
atomic의 작업 디렉토리 (wd)는 이것에 대한 좋은 패키지 인 것 같습니다 : https://github.com/karlin/working-directory
2 개의 bash 함수를 구현했습니다.
cdh (cd history) : 마지막 9 개 디렉토리를 자동으로 기억하고 번호를 입력하여 그 중 하나로 돌아갈 수 있습니다.
cdb (cd bookmarks) : 현재 디렉토리에 문자를 지정하고 나중에이 문자를 입력하여이 디렉토리로 이동할 수 있습니다.
cdh와 cdb는 모두 autocd (일명 "cd witout cd")와 함께 작동합니다.