마지막 문자를 기반으로 디렉토리에 CD를 넣는 방법이 있습니까?

마지막 문자를 기반으로 디렉토리에 CD를 넣는 방법이 있습니까?

로 시작하는 디렉토리가 있지만 164마지막 몇 자리 숫자에 따라 다릅니다. 나는 마지막 몇 자리 숫자(마지막 숫자 자체가 아닌 경우)를 기반으로 디렉토리에 CD를 넣고 싶습니다 9. 8디렉토리의 마지막 숫자는 고유합니다. 이것이 가능합니까? 첫 번째 숫자로 시작하면 자동 완성 기능에 여러 가능성이 나열됩니다 164.

답변1

Bash의 경우 예, 와일드카드를 사용할 수 있습니다.

cd /path/to/*9/

(필요한 번호로 바꾸십시오. 9모든 디렉토리가 포함된 디렉토리에 있는 경우 삭제할 수 있습니다.)/path/to/164...

표현식이 단일 디렉토리로 해석될 만큼 충분히 구체적인지 확인해야 합니다. 그렇지 않으면 cd해당 인수에 지정된 첫 번째 디렉토리(4.4 이전 버전의 Bash)로 변경되거나 오류로 인해 실패합니다(Bash 4.4 이상은 빌드됨). 와 함께 CD_COMPLAINS). (2개의 인수 형식을 갖는 Zsh 또는 Ksh의 경우 cd현재 경로에 첫 번째 인수가 포함된 경우에만 실수로 호출할 수 있습니다.)

위 명령을 입력한 후 실행하기 전에 탭 완성을 사용할 수도 있습니다. 여러 디렉터리가 일치하면 셸에서 해당 명령을 모두 나열합니다.

답변2

그렇다면실제로마지막 몇 자리를 제외한 모든 숫자를 다르게 만들려면 cd 명령에 와일드카드 문자를 사용할 수 있습니다. 예를 들어 다음과 같습니다.

cd 164*8

(실제로 다르지 않으면 쉘은 오류 메시지를 생성하여 경고합니다).

답변3

몇 가지 사용자 정의 작업을 수행할 수 있습니다.

mycd() {
    local ng=$( shopt -p nullglob )
    shopt -s nullglob
    local status

    local matches=( *"$1"/ )  # directories ending in the parameter
    case ${#matches[@]} in
        0) echo "no directory ends with $1" >&2; status=1 ;;
        1) cd "${matches[0]}"; status=$? ;;
        *) echo "multiple directories end with $1" >&2; status=1 ;;
    esac

    $ng   # restore the previous nullglob setting. specifically unquoted
    return $status
}

mycd 89  # cd to the subdir ending with 89

일치하는 디렉터리가 여러 개 있는 경우 select 문을 사용하여 원하는 디렉터리를 선택할 수 있도록 확장할 수 있습니다.

관련 정보