x번째 디렉토리 터미널로 변경

x번째 디렉토리 터미널로 변경

Unix 쉘(특히 Ubuntu)에서 ls 명령으로 인쇄된 x번째 디렉토리로 디렉토리를 변경하는 방법이 있습니까? 여러 가지 방법으로 디렉토리를 정렬할 수 있다는 것을 알고 있지만 ls의 출력을 사용하여 x번째 디렉토리를 얻으시겠습니까?

예제 셸:

$ ls
$ first_dir second_dir third_really_long_and_complex_dir

여기서 3(또는 적절한 배열 형식의 경우 2)을 전달하여 third_really_long_and_complex_dir로 이동하고 싶습니다. 간단히 복사하여 붙여넣기만 하면 되지만 이미 키보드를 사용하고 있다면 "cdls 2" 같은 것을 입력하거나 색인을 알고 있으면 그와 유사한 것을 입력하는 것이 더 쉬울 것입니다.

업데이트

아직도 이 내용을 보고 계신 분들을 위해 말씀드리자면, 제가 Linux/Bash를 처음 접했을 때 탭 완성과 같은 것이 있다는 것을 깨닫지 못했을 때 이 질문을 만들었습니다.

답변1

대화형 세션의 주요 문제점 cd은 일반적으로 명령 프롬프트를 처리하는 셸의 현재 디렉터리를 변경하려고 한다는 것입니다. 즉, 하위 셸(예: 스크립트)을 시작하면 cd호출이 상위 셸에 영향을 주지 않으므로 도움이 되지 않습니다.

그러나 사용하는 쉘에 따라 다음을 정의할 수 있습니다.기능이것을하기 위해. 예를 들어 Bash에서는 다음과 같습니다.

function cdls() {
    # Save the current state of the nullglob option
    SHOPT=`shopt -p nullglob`

    # Make sure that */ expands to nothing when no directories are present
    shopt -s nullglob

    # Get a list of directories
    DIRS=(*/)

    # Restore the nullblob option state
    $SHOPT

    # cd using a zero-based index
    cd "${DIRS[$1]}"
}

이 예에서는 의 출력 구문 분석을 절대 거부합니다 ls.여러 가지 이유로. 대신 쉘 자체가 디렉토리 목록(또는 디렉토리에 대한 링크)을 검색하도록 했습니다...

즉, 나는 이 기능(또는 이 효과에 대한 다른 것)을 사용하는 것이 rm잘못된 디렉토리로 변경한 후 사용하는 것과 같은 엄청난 혼란에 대비하는 아주 좋은 방법이라고 생각합니다. 파일 이름 자동 완성은 강요하지 않고도 이미 충분히 위험합니다.세다...

답변2

나는 이것에 대한 기능을 가지고 있습니다 :

   기능 CDI. {
       IFS=$'\n'
       페이지=${1:-1}
       LPP=${2:-11}
       첫 번째=$(( 1 + LPP * 페이지 - LPP ))
       마지막=$(( LPP * 페이지 ))
       $(find . -maxlength 1 -type d -printf "%P\n" |\에서 cd_into를 선택하세요.
             sed -n $first,${last}p);
       하다
           종료=-1;
           if [[ $REPLY == n ]]; 그런 다음 PAGE=PAGE+1을 설정합니다. cdi. $페이지 $LPP ; 종료=$?
         elif [[ $REPLY == p ]]; 그런 다음 PAGE=PAGE-1로 설정합니다. cdi. $페이지 $LPP ; 종료=$?
         elif [[ $REPLY == m ]]; 그런 다음 LPP=LPP*2로 설정합니다. cdi. $페이지 $LPP ; 종료=$?
         elif [[ $REPLY == l ]]; 그런 다음 LPP=LPP/2로 설정합니다. cdi. $페이지 $LPP ; 종료=$?
         elif [[ $REPLY == q || $REPLY == 0 ]]; 그런 다음 0을 반환합니다. fi

           if [ $EXIT -eq 0 ]; 그런 다음 0을 반환합니다. fi

           cd_into=${cd_into//\~/$HOME}
           if [ -d "$cd_into" ];then
               cd "$cd_into"; 0을 반환합니다. 또 다른
               echo "앗! \`$cd_into'는 폴더(?)가 아닙니다."
           fi
       완료
       IFS 설정 해제
   }

사용:

$cdi.
1) .mozilla.new 3) .swt 5) tmp 7) .vim 9) .ssh
2) .crack-attack 4) 다운로드 6) .Eterm 8) .frozen-bubble 10) .irssi
어느 #?:

관련 정보