저는 보통 같은 서버에 있는 여러 폴더( dev1
, , 및 )에서 dev2
작업합니다 . dev3
폴더 구조는 다음과 같습니다.
/var/www/html/dev1/a/b/c/d/e/f
/var/www/html/dev2/a/b/c/d/e/f
/var/www/html/dev3/a/b/c/d/e/f
c
특정 폴더(예: 또는 d
또는 e
of) 에 있을 때 /var/www/html/dev3/
나를 데려가는 명령이 있습니까 /var/www/html/dev3/a
?
폴더 또는 /var/www/html/dev1/a
.c
d
e
/var/www/html/dev1/
답변1
방법 #1 - 상대 CD
현재 위치에서 특정 깊이 위로 이동하는 가장 쉬운 방법은 다음 명령을 실행하는 것입니다.
$ pwd
/Users/sammingolelli/adir/dev3/a/b/c/d/e/f
$ cd ../../../../..
$ pwd
/Users/sammingolelli/adir/dev3/a
방법 #2 - pushd/popd
이 외에도 pushd
및 를 popd
스택으로 사용하여 FIFO 또는 디렉터리로 이동한 후 스택에서 이전에 푸시된 디렉터리로 돌아갈 pushd
때 알려주는 FIFO 또는 디렉터리를 유지 관리할 수 있습니다.popd
$ pwd
/Users/sammingolelli/adir/dev3/a
$ dirs
~/adir/dev3/a
$ pushd b/c/d/e/f/
~/adir/dev3/a/b/c/d/e/f ~/adir/dev3/a
$ pwd
/Users/sammingolelli/adir/dev3/a/b/c/d/e/f
$ popd
~/adir/dev3/a
$ pwd
/Users/sammingolelli/adir/dev3/a
방법 #3 - 별칭
원하는 작업을 수행하기 위해 별칭을 만들 수도 있습니다. 이 문제를 다루는 여러 Q&A가 이미 사이트에 있거나 @fastrizwaan의 답변을 참조하세요.
방법 #4 - CDPATH
이 대답을 봐@직원, 이 Q&A에 관해: 터미널에서 빠른 디렉토리 탐색.
더 나아가 도구를 사용하시나요?
위의 두 가지 방법은 가장 일반적으로 사용되는 이동 방법입니다. 물론 다른 도구를 탐색 도구로 설치할 수도 있습니다. 이러한 도구는 이 사이트에서 많이 논의되었습니다. 마음에 떠오르는 것 중 하나는 특정 디렉토리를 "북마크"하고 짧은 이름으로 매핑하여 어디에서나 쉽게 변경할 수 있게 해주는 북마크 도구입니다.
자동 점프나는 이 Q&A에서 그러한 도구 중 하나에 대해 논의합니다.짧은 경로를 만드는 방법은 무엇입니까?. 도구가 호출됩니다.자동 점프.
다른 사람다음과 같은 제목의 Q&A에 제안된 몇 가지 다른 사항이 있습니다.터미널에서 빠른 디렉토리 탐색.
답변2
이것은 기능적인 작업입니다. 쉘이 bash라고 가정하면 .bashrc
이 기능은 다음에 bash를 시작할 때 사용할 수 있습니다.
cdwww () {
…
}
무엇을 해야 합니까 …
? 주문이어야 합니다 cd
. 현재 디렉토리의 경로는 변수에 있습니다 PWD
.문자열 처리그리고 다른 구조물.
/var/www/html
예를 들어 현재 디렉터리가 아래에 있는 경우 다음 함수는 현재 디렉터리보다 한 수준 위의 디렉터리로 이동합니다 /var/www/html
.
cdwww () {
if [[ $PWD = /var/www/html/*/* ]]; then
local d="${PWD#/var/www/html/*/*/}"
cd "${PWD%"$d"}"
else
echo 1>&2 "$0: not under a web root"
return 3
fi
}
이 함수가 다른 하위 디렉터리에 대한 경로를 허용하도록 만들 수 있습니다 /var/www/html/dev*/a
.
cdwww () {
if [[ $PWD = /var/www/html/*/* ]]; then
local d="${PWD#/var/www/html/*/*/}"
cd "${PWD%"$d"}/$1"
else
echo 1>&2 "$0: not under a web root"
return 3
fi
}
또 다른 방법은 디렉터리를 변경할 때마다 대상 디렉터리에 변수를 설정하는 것입니다. 다음 코드는 chpwd
현재 디렉터리가 변경될 때마다 이 함수가 실행되도록 예약합니다.
cd () { builtin cd "$@" && chpwd; }
pushd () { builtin pushd "$@" && chpwd; }
popd () { builtin popd "$@" && chpwd; }
chpwd () {
if [[ $PWD = /var/www/html/*/* ]]; then
local d="${PWD#/var/www/html/*/*/}"
html_root="${PWD%"$d"}"
else
unset html_root
fi
}
그런 다음 다음을 사용할 수 있습니다 cd $html_root
(또는 $html_root
켠 경우shopt -s autocd
).
답변3
이제 귀하의 질문을 이해합니다.
cd $(pwd|cut -c 1-18)/a
/var/www/html/dev1/a
당신이 아래나 안에 있을 때, dev1
아래 /var/www/html/dev2/a
나 안에 있을 때 dev2
등 으로 당신을 데려갈 것입니다 .
cut
여기에 해킹이 있는 것 같습니다. 18
경로가 변경되면 변경해야 하지만 정규식을 사용하는 더 우아한 솔루션을 찾지 못했습니다.
답변4
존재하다 zsh
:
cd $PWD[1,(rn[5])/]
첫 번째 문자 에서cd
하위 문자열을 시작 하고 $PWD
첫 번째 문자 발생 에서 끝납니다 . 따라서 다음과 같습니다.1
5
/
1 2 3 4 5 /var/www/html/dev1/a/b/c/d/e/f
그러면 하나가 될 것입니다 cd /var/www/html/dev1/
.
도우미 함수를 만들 수 있습니다.
cdd() cd $PWD[1,(rn:argv[1]:)/]
예를 들어, 인수로 주어진 epth 내에서 cd
.$PWD
d
cdd 5