find
정규식(macOS 14.4.1, Zsh 5.9)과 함께 명령을 사용하는 방법을 이해하려고 합니다 .
note-red.png
note-yellow.png
, , (및 기타 색상), folder-red.png
, , (및 기타 색상) 과 같은 파일이 포함된 디렉토리가 있지만 folder-yellow.png
해당 폴더에서 다음 명령을 실행하면 결과가 표시되지 않습니다. 내가 뭘 잘못했나요?
find -E . -regex '^(note|folder)'
find -E . -regex '^(note|folder).+'
답변1
RE의 구조가 잘못되었습니다. 자세한 내용은 man find
Mac에서 다음 내용을 참조하세요.
-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
). 아마도 속도는 느려질 수 있습니다.