"find" 명령의 "-name" 옵션에서 0개 또는 1개의 문자를 어떻게 일치시키나요?

"find" 명령의 "-name" 옵션에서 0개 또는 1개의 문자를 어떻게 일치시키나요?

.ly예를 들어 이 디렉터리와 또는 로 끝나는 하위 디렉터리의 모든 파일을 일치시키려고 합니다 .ily. 지금까지는 find . -name "*.*ly" -print이것이 내가 얻을 수 있는 가장 가까운 것이지만 내가 원하지 않는 파일 이름을 찾을 수도 있습니다.

답변1

-o"또는" 옵션인 이 옵션을 사용할 수 있습니다 .

가장 간단한 버전은

find . -name '*.ly' -o -name '*.ily'

-print이는 기본 작업이기 때문에 작동합니다 .

하지만 이것이 -print단지 예일 뿐이라면 이 두 절을 결합해야 할 수도 있습니다.

find . \( -name '*.ly' -o -name '*.ily' \) -print

답변2

zshglob에는 **/재귀적 globbing 연산자와 glob 한정자가 있으므로 수행할 수 있는 대부분의 작업을 findglob으로 수행할 수 있습니다. 0 또는 1, 일명.임의로 선택할 수 있는거기에서 뭔가를 할 수 있습니다 (|something)(아무것도 하지 않거나무엇(#cX,Y)), 정규식과 유사한 임의 {X,Y}간격 연산자 도 있지만 (필수 set -o extendedglob):

print -rC1 -- **/*.(|i)ly(N)

find이는 정렬된 목록 제공, 숨겨진 파일 건너뛰기( D필요한 경우 한정자 사용), ./접두사 방지 및 임의의 파일 이름 사용(많은 find 구현에는 유효한 텍스트가 아닌 파일 이름에 대한 GNU find차단이 포함됨) 로캘)과 비교하여 사용자에게 이점이 있습니다. 단순히 인쇄하는 것 이상이 필요한 경우 파일 목록을 처리하는 것이 더 쉽고 안전할 때가 많습니다.

답변3

-regex또 다른 해결책은 find이를 지원하는 구현과 함께 사용하는 것입니다.

그리고암소 비슷한 일종의 영양find:

find -regex '.*\.i?ly'
# or the full command
find . -regextype posix-extended -regex '.*\.i?ly'

그리고BSDfind:

find -E . -regex '.*\.i?ly'

-regex옵션은 전체 경로와 일치하고 시작과 끝 모두에 고정되므로 끝이 아닌 시작 부분에 필요합니다 .*.$

?확장하다정규식 연산자( 에서와 같이 grep -E)는 이전 원자(여기)의 0 또는 1과 일치합니다 i. 기본 정규 표현식에서는 사용할 수 없으므로 -EBSD에서 해당 표현식이 필요합니다 find. GNU find(적어도 현재 버전에서는)에서 기본 정규식은 기본 정규식도 확장 정규식도 아니지만 일부 고대 버전의 emacs에서 나온 일부 정규식 변형입니다.? 지원됩니다. 따라서 -regextype posix-extended이 경우에는 필요하지 않습니다.


그러나 \{0,1\}나중에 ERE와 동일하게 1이 BRE에 추가되었습니다.?

관련 정보