하나의 중복 폴더 구조 내에서 다른 폴더 구조로 디렉토리를 변경하는 쉬운 방법이 있습니까?

하나의 중복 폴더 구조 내에서 다른 폴더 구조로 디렉토리를 변경하는 쉬운 방법이 있습니까?

우리 서버에는 테스트, 스테이징 및 프로덕션을 위한 여러 개의 중복 폴더 구조가 있습니다. 사소한 변경 사항을 제외하면 세 가지 모두의 폴더 구조는 일반적으로 동일합니다.

WordPress 플러그인 작업을 할 때 개발 폴더 구조(예: ) 내부에 있습니다 ~/dev/com/wp-content/plugins/myplugin. 나는 그것이 ~/staging/com/wp-content/plugins/myplugin존재한다는 것을 알고 있습니다.

현재 작업 디렉토리가 라면 ~/dev/com/wp-content/plugins/myplugin어떻게든 쉽게 다음으로 전환할 수 있나요?~/staging/com/wp-content/plugins/myplugin 없이전체 디렉토리 구조를 입력하시겠습니까?

다음과 같은 것을 입력하고 싶습니다.cdx~/staging, 또는cdx../../../../../staging현재 디렉터리 경로를 사용하여 새 디렉터리를 탐색하는 명령을 실행합니다. 분명히 새 폴더에 적절한 구조가 포함되어 있지 않으면 오류가 발생합니다.

전체 디렉토리 구조를 입력하는 데 멈췄습니까? 아니면 더 좋은 방법이 있나요?

답변1

다음에서 문자열 대체를 사용하십시오 bash.

$ a="~/dev/com/wp-content/plugins/myplugin"
$ echo ${a/dev/staging}
~/staging/com/wp-content/plugins/myplugin

따라서 다음과 같은 기능이 있습니다.

cdx () 
{
    cd "${PWD/$1/$2}"
}

그런 다음 cdx dev staging폴더에서 으로 전환 dev하십시오 staging. 몇 가지 확인을 통해 함수 이름을 다음과 같이 지정할 수 있습니다 cd.

cd ()
{
    if [ $# != 2 ]
    then
        builtin cd "$@"
    else
        builtin cd "${PWD/$1/$2}"
    fi
}

효과:

~ # cd /tmp
/tmp # cd tmp srv
/srv # cd
~ # cd -
/srv
/srv # cd tmp var
/srv #

cd이는 두 개의 인수를 제외한 모든 경우 의 일반적인 동작을 유지합니다 .

답변2

이 기능을 에 추가하고 .bash_profile입력하면 내부의 디렉터리 간에 에 해당하는 cdstaging디렉터리 간에 변경할 수 있습니다 .~/dev~/staging

물론 원하는 이름으로 변경할 수 있습니다. 또한 함수 이름을 변경하고 "1s@dev@staging@"그 반대의 역방향 함수를 만들 수도 있습니다 .

cdstaging ()
{
        OLDPATH=$(pwd | sed -e "1s@$HOME@~@")
        NEWPATH=$(echo $OLDPATH | sed -e "1s@dev@staging@")
        cd $NEWPATH
}

답변3

또는 :kshzsh

cd dev staging

관련 정보