2014-11-28 3 views
-1

오케이,내부 parentubdir 인 경우 Bash 레벨 1 하위 디렉토리로 이동

쉘에서 다음과 같이하고 싶습니다.

내가 mypage (예를 들어, projects/mypage/htdocs/css)와 같은 하위 디렉토리가 내부 css 같은 하위 디렉터리에서 오전하면 내가 mypage있는 프로젝트의 루트 디렉토리로 이동하고 싶습니다. 이 기능을 명령으로 우리에게 쓰고 싶습니다. 유일한 "고정 된"값은 projects입니다.

기본적으로 쉘의 프로젝트 하위 디렉토리에있는 경우 goroot (또는 무엇이든) 명령을 입력하면 실제로 프로젝트의 하위 디렉토리에 있는지 여부를 확인하는 기능이 필요합니다. 현재 서브 디렉토리.

예.

~/projects/mypage/htdocs/css › goroot [hit return] 
~/projects/mypage > [jumped to here] 

이 모든 것이 가능합니까? 그렇다면 어떻게해야합니까?

+1

@anubhava'~/projects/otherpage/foo'에있을 때'~/projects/mypage'가 아니라'~/projects/otherpage'로 가길 원합니다. – Bolo

답변

1

내가 제대로 이해하고 가정이 작동합니다 :이 sed 명령 효과적으로 디렉토리로 변경 한 후 ~/projects/SOMETHING 후 모든 전원 스트립 및

goroot() { cd $(sed -r 's#(~/projects/[^/]*)/.*#\1#' <<< $PWD); } 

. ~/projects/이 아니라면 현재 디렉토리에 남겨 둡니다.

참고 :이 $PWD이 그 다음 적절하게 sed 명령을 수정 /home/user/ 같은 경우, 집에 나타 내기 위해 ~를 사용한다고 가정합니다.

+0

나는'-r'을'-E'로 바꿔야했습니다. 왜냐하면 나는 OSS를 사용하고 있고 PWD 내용 때문에 당신이 말한대로 sed를 수정해야했기 때문입니다. 이걸로 매력처럼 작동합니다. 감사 –

1
projroot=/home/user/projects 

goroot() { 
    # Strip off project root prefix. 
    local m=${d#$projroot/} 
    if [ "$m" = "$d" ]; then 
     echo "Not in ~/projects" 
     return 
    fi 

    # Strip off project directory. 
    local suf=${m#*/} 
    if [ "$suf" = "$m" ]; then 
     echo "Already in project root." 
     return 
    fi 

    # cd to concatenation of project root, and project directory (stripped of sub-project path). 
    cd "$projroot/${m%/$suf}" 
} 
관련 문제