로 시작하는 디렉토리가 있지만 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 문을 사용하여 원하는 디렉터리를 선택할 수 있도록 확장할 수 있습니다.