zsh에서 글로브를 필터링하는 방법

zsh에서 글로브를 필터링하는 방법

기본적으로 zsh에서 glob을 사용하여 목록을 만들 수 있습니다. 알고 보니 그 목록을 필터링하고 싶은 경우가 많은데 굳이 그렇게 해야 하는지 이상하게 궁금합니다.

zsh에서 목록을 필터링하는 방법이 있습니까? 당연한 일이 아닌가 싶습니다만, 오늘은 정신적으로 수확량이 적은 날입니다.

답변1

zsh가 이 기능을 갖춘 유일한 쉘이기 때문에 이것은 이상한 질문입니다. 그것은 알려져있다글로벌 예선. 평소와 같이 매뉴얼은 다소 간결하고 예제가 부족합니다. 이것Zsh 애호가이 페이지에는 몇 가지 예가 있습니다.구글 검색zsh "glob qualifiers"여러 블로그 게시물과 튜토리얼이 나타났습니다. 검색도 가능합니다"glob qualifier"이 웹사이트에서.

기본 사항: glob 한정자는 glob 끝의 괄호 안에 있습니다. 가장 유용한 것은 특정 파일 형식만 선택하는 데 구두점입니다.

echo *(/)      # directories
echo *(.)      # regular files
echo *(@)      # symbolic links
echo *(-/)     # directories and symbolic links to directories

크기, 날짜, 소유권과 같은 메타데이터를 필터링하는 다른 한정자가 있습니다.

# files owned by the user running zsh, over 1MB, last modified more than 7 days ago
echo *(ULm+1m+7)

Glob 한정자는 일치 순서를 제어하고 일치 횟수를 제한할 수도 있습니다.

echo *(Om[1,10])     # The 10 oldest files

한정자가 있는 함수를 호출하여 임의의 필터를 설정할 수 있습니다( 까다로운 인용이 괜찮다면 +코드를 한정자로 인라인할 수도 있습니다 ).e

불행히도 이 모든 것은 전 세계적으로만 적용됩니다. 이런 방식으로 파일 이름 목록을 작성하려면 와일드카드를 사용할 때 필터링해야 합니다. 이미 작성한 목록을 필터링하려는 경우 완전히 다른 구문이 있습니다.매개변수 확장 플래그, 단순 텍스트 필터링( "${(@)ARRAY:#PATTERN}")만 수행할 수 있습니다.

관련 정보