용법:

용법:

문맥

내가 있는 디렉토리에는 3개의 폴더가 있습니다. 실행 후 ls -1순서는 다음과 같습니다.

folder1
folder2
folder3

cd빨리 들어가고 싶어요 folder2.

cd빠르게 함수 를 작성할 수 있었습니다folder1

그것은 내 책임이다.

f1 () {
       cd $(ls -d */|head -n 1)
}

질문

라는 함수가 필요합니다 f2. 실행되면 cds가 입력됩니다 folder2.


(폴더는 으로 정렬됩니다 ls -1. 저는 을 사용하고 있습니다 zsh)

답변1

Shell glob은 기본적으로 사전순으로 정렬되며 Zsh에서는 glob 결과의 직접 인덱싱을 허용하므로 다음을 수행할 수 있습니다.

cd2() {
    cd -- */([2]);       # indexing starts at one
}

Bash에서는 배열을 사용하여 동일한 작업을 수행할 수 있습니다.

cd2() {
    local dirs=(*/)
    cd -- "${dirs[1]}"   # indexing starts at zero
}

둘 다 본질적으로 적어도 두 개의 전역 일치가 있다고 가정합니다. 바라보다코살로난다의 답변이 가정을 다루는 방법을 배우십시오.

또한 ls별칭을 사용하여 플래그를 지정하면 정렬 순서가 셸의 정렬 순서와 다를 수 있습니다. (저는 Linux에서 별칭을 사용했으며 ls및 의 정렬 순서도 변경했습니다.) 물론 Zsh는 다양한 다른 정렬 옵션도 제공합니다.ls -vF --color=auto-va_


참고하시기 바랍니다.당신은 할 수ls | head -2 | tail -1출력 목록에서 두 번째 파일 이름 가져오기 와 같은 방법을 사용하세요 ls. 이것은 개행 문자가 있는 파일 이름에는 작동하지 않으며 쉘이 자체적으로 수행할 수 있는 작업을 수행하려면 하나가 아닌 세 개의 외부 프로세스가 필요하므로 이는 별로 좋은 해결책이 아닙니다. . ls */더 멍청한 건 여기 있으니까껍데기glob을 확장하고 ls받은 이름만 인쇄합니다. 바라보다https://mywiki.wooledge.org/ParsingLs종속성 출력에서 ls​​발생할 수 있는 문제 에 대해 자세히 알아보세요.

답변2

를 사용하면 zsh다음 내용이 cd현재 디렉터리 내의 두 번째 디렉터리로 이동합니다.

cd ./*(/[2])

/대괄호 안에는 glob에 대한 수정자가 있어 *디렉터리 이름만 일치하고(설명서 참조 zshexpn) [2]이 glob과 일치하는 두 번째 디렉터리를 추출합니다.

함수로 감싸십시오.

cd2nd () { cd ./*(/[2]); }

현재 디렉토리에 두 번째 디렉토리가 없으면 홈 디렉토리로 이동합니다. 두 번째 디렉터리가 존재하는지 먼저 테스트하여 이를 방지할 수 있습니다.

cd2nd () { [ -d ./*(/[2]) ] && cd ./*(/[2]); }

하지만 이제 모델을 확장해 보겠습니다.두 배.

/bin/sh(또는 ) 에는 zsh전역 일치 항목이 하나만 있습니다.

cd2nd () { set -- ./*/; [ -d "$2" ] && cd "$2"; }

이는 위치 인수를 사용하여 모든 하위 디렉터리 이름(일치하는 디렉터리만)을 저장하고 */, 두 번째 하위 디렉터리가 있는지 테스트하고, 존재하는 경우 해당 디렉터리를 변경합니다.

답변3

인수와 인수가 변경되어야 하는 디렉터리 번호를 받아들이는 함수

function ff()
{
    cd "$(ls -d */ | head -n $1 | tail -n 1)";
}

용법:

user@localhost:~ $ ff 2
user@localhost:~/Desktop $

설명하다:

  • ls -d */현재 디렉터리 아래의 모든 디렉터리 나열
  • head -n $1첫 번째 디렉터리 만 $1나열되고 $1함수 인수이므로 cc 2그때 호출하면 $1값을 가져옵니다 2(처음 두 줄은 현재 처리 중입니다).
  • tail -n 1마지막 행만 선택
  • 이 모든 것이 cd명령으로 전송되므로 디렉터리가 올바른 디렉터리로 변경됩니다(따옴표가 있으므로 공백이 있는 디렉터리 이름은 인수로 구문 분석됩니다).

경고하다!

이 버전에서는 입력에 문제가 없다고 가정합니다. 향후 예상치 못한 오류를 방지하려면 입력(사용자 및 파일 시스템 디렉터리 목록에서)을 확인해야 합니다.

관련 정보