경로의 일부만 바꾸어 디렉토리 (cd)를 변경하십시오.


14

그것이 가능한지 확실하지 않지만, AIX를 사용하여 옛날부터 기억하는 것 같습니다. 경로의 어떤 부분을 다른 것으로 대체해야한다고 말함으로써 경로를 바꿀 수있었습니다. 예를 들어 두 가지 경로가 있다고 가정 해보십시오.

/etc/application-2.0.1/options/default

/etc/application-1.0.8/options/default

내가 같은 명령을 사용하여 폴더 1에서 2로 전환 할 수 있다는

cd /2.0.1/1.0.8/

경로에서 문자열 2.0.1을로 바꿉니다 1.0.8. 분명히 이것은 지금 나를 위해 작동하지 않습니다. 그러나 이것을 할 수있는 방법이 있습니까?

답변:


11

zsh 를 쉘로 사용하는 경우을 입력하면 cd 1.0.8 2.0.1됩니다.


이것은 나에게 가장 좋은 옵션 인 것 같습니다. 이제 그 것을 설치하는 방법을 찾고 :)
nathanvda

1
sudo apt-get install zsh
koushik

1
RandomMonkey의 대답은 Bash의 "cd"내장에서 전체 경로 대체 기능을 허용합니다.
kmarsh

9

이것은 우분투 10.04의 bash에서 작동 cd ${PWD/old/new}합니다. 기본적으로이의 첫 번째 항목을 대체 old당신의 현재 작업 디렉토리new. 아래 2 가지 예.

실시 예 1

ing02741@hoster:~$ cd /home/ing02741/Videos/
ing02741@hoster:~/Videos$ cd ${PWD/ing02741/koushik}
ing02741@hoster:/home/koushik/Videos$ 

실시 예 2

ing02741@hoster:~/src/cdtest$ mkdir dir-v1.0.1 dir-v2.2.2 dir-v3.0.7
ing02741@hoster:~/src/cdtest$ mkdir dir-v1.0.1/ind dir-v2.2.2/ind dir-v3.0.7/ind
ing02741@hoster:~/src/cdtest$ cd dir-v1.0.1/ind/
ing02741@hoster:~/src/cdtest/dir-v1.0.1/ind$ cd ${PWD/1.0.1/2.2.2}
ing02741@hoster:~/src/cdtest/dir-v2.2.2/ind$ 

위의 sepp2k 아이디어를 빌리면 다음과 같은 기능을 수행 할 수 있습니다

function mycd { cd ${PWD/$1/$2} }

그런 다음 mycd 2.0.1 1.0.8전환 과 같은 것을 사용하십시오 .


1
이것은 1/2 방법입니다. RandomMonkey의 답변을 보면 Bash Cd 내장 기능에서 모든 기능이 가능하다는 것을 알 수 있습니다.
kmarsh

8

나는이 기능을 직접 사용했다. 사용중인 * nix의 맛 및 / 또는 릴리스에 따라 다릅니다. bash를 사용하는 경우 내장 CD를 확장하여이 기능을 포함시키는 편리한 방법이 있습니다. 이것을 .bashrc에 넣으십시오 (또는 bash 쉘에 붙여 넣기를 테스트하고 Enter 키를 누르십시오).

function cd() { if [ $# -eq 2 ]; then builtin cd ${PWD/$1/$2}; else builtin cd $1; fi }

7

아마도 역사 확장을 기억하고있을 것입니다. AIX에서 쉘에서 사용할 수있는 것을 모르지만 bash에서 이것을 수행하는 한 가지 방법은 ^2.0.1^1.0.8입니다.

히스토리 확장은 강력한 명령 행 편집 기능이있는 bash 및 zsh와 같은 쉘에서는 유용하지 않습니다. 화살표 키를 사용하여 이전 명령을 다시 호출하고 Alt+ .를 사용하여 이전 명령의 마지막 단어를 삽입 할 수 있습니다 (두 번 눌러 이전 명령으로 이동 등).


histverify옵션 shopt이 켜져있는 경우 Enter 키를 두 번 눌러야합니다 .
추후 공지가있을 때까지 일시 중지되었습니다.

@Dennis : 감사 --norc합니다. 테스트 할 때 잊어 버렸습니다 .
Gilles 'SO- 악마 그만'

3

vi 팬이라면 쉘에서 vi 모드 (예 : bash set -o vi)를 활성화하고 vi의 명령 모드를 사용할 수 있습니다 ...

또는 미친 역사 확장을 할 수 있습니다 (zsh, 아마도 bash에서도 테스트 됨).

$ cd /etc/application-1.0.8/options/default
cd: no such file or directory: /etc/application-1.0.8/options/default

$ !!:s/1.0.8/2.0.1/
cd /etc/application-2.0.1/options/default
cd: no such file or directory: /etc/application-2.0.1/options/default

Btw는 bash에서 테스트했으며 거기에서도 작동합니다.
maxschlepzig

3
cd `pwd | sed 's/2\.0\.1/1\.0\.8/'`

그러나 이것은 매우 예쁘지 않습니다. 함수에 넣어서 약간 예쁘게 만들 수 있습니다.

function mycd { cd `pwd | sed s$1` }

그리고 다음과 같이 호출하십시오.

mycd '/2\.0\.1/1.0.8/'

그래도 점을 피해야하지만 약간의 생각으로 해결할 수 있다고 확신합니다.


대체의 오른쪽에있는 점을 벗어날 필요는 없습니다. 대부분의 경우 비슷한 이름의 폴더가 없으면 왼쪽의 점을 이스케이프 처리해도 무해합니다.
frabjous

3
 ^2.0.1^1.0.8 

위의 명령은 마지막 명령에서 2.0.1을 1.0.8로 바꾸고 bash에서 작동합니다.


2

-P|-L|-작업 을 보장하려면 다음을 사용하십시오.

function cd () {
    typeset arg=
    case $1 in -|-L|-P) arg=$1 ; shift ;; esac
    [ $# -gt 1 ] && {
        builtin cd $arg "${PWD/$1/$2}"
    } || {
        builtin cd $arg "$@"
    }
}

1

AIX에 대해서는 확실하지 않지만 관리에 사용했던 Solaris 상자에서 오래된 Korn 쉘 트릭으로 기억합니다. 예를 들어, 다음 명령을 입력하십시오.

cd 2.0.1 1.0.8

여기에 더 많은 정보가 있습니다 .


이것은 나를 위해 작동하지 않았다 : 우분투 10.04, bash "GNU bash, 버전 4.1.5 (1)-릴리스 (i486-pc-linux-gnu)", 나는 다음 명령을 시도했다 : 2048 cd 2049 cd ~ / src / local -ubuntu-patches / cdtest / dir-v1.0.9 / gnome-control-center-2.30.1 / capplets / network / 2050 cd dir-v1.2.9 dir-v1.0.9 / home / ing02741 / src / local-ubuntu- patch / cdtest / dir-v1.2.9 / gnome-control-center-2.30.1 / capplets / network는 유효한 경로입니다.
koushik

@ koushik : 그는 Korn 쉘 트릭이라고 썼습니다. bash를 사용하고 있습니다. bash! = korn. 우분투에서 ksh는 패키지 'ksh'를 통해 사용할 수 있습니다.
maxschlepzig

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