정규 표현식과 함께 찾기 사용

정규 표현식과 함께 찾기 사용

find정규식(macOS 14.4.1, Zsh 5.9)과 함께 명령을 사용하는 방법을 이해하려고 합니다 .

note-red.pngnote-yellow.png, , (및 기타 색상), folder-red.png, , (및 기타 색상) 과 같은 파일이 포함된 디렉토리가 있지만 folder-yellow.png해당 폴더에서 다음 명령을 실행하면 결과가 표시되지 않습니다. 내가 뭘 잘못했나요?

find -E . -regex '^(note|folder)'
find -E . -regex '^(note|folder).+'

답변1

RE의 구조가 잘못되었습니다. 자세한 내용은 man findMac에서 다음 내용을 참조하세요.

-regex pattern파일의 전체 경로가 정규식을 사용하는 패턴과 일치하면 참입니다. 라는 파일을 일치시키려면 ./foo/xyzzy정규식 .*/[xyz]*or 을 사용할 수 있지만 or 는 .*/foo/.*사용할 수 없습니다 .xyzzy/foo/

그래서 당신은 사용해야합니다 -regex '.*/(note|folder)-.*'.

ERE가 활성화된 상태에서 교대를 사용해야 한다는 요구 사항을 이미 확인했으므로 -E(그룹화 구문이 에서 로 변경됨 \(...\)) (...)괜찮습니다.

find -E . -regex '.*/(note|folder)-.*'

note-또는 보다 정확하게 일치하려면( 또는로 시작하는 중간 디렉터리 이름과 일치하지 않음 folder-)

find -E . -regex '.*/(note|folder)-[^/]*\.png$'

표준 테스트를 사용하여 두 패턴을 모두 일치시킬 수도 있습니다 -name.

find . \( -name 'note-*.png' -o -name 'folder-*.png' \)

또는 그것을 사용하고 있으므로 zsh대신 재귀 glob을 사용하십시오 find.

print -rC1 -- **/(note|folder)-*.png(ND)

(또한 ./경로의 접두사를 피하고 정렬된 목록을 제공하며(한정자를 사용하지 않아도 됨 oN) 숨겨진 파일 스크립트를 더 쉽게 작성할 수 있습니다(한정자를 제거하여 D). 아마도 속도는 느려질 수 있습니다.

관련 정보