이 find 표현식에서 내가 무엇을 잘못했나요?
; touch ook ooks
; find . -name 'ook' -or -name 'ooks' -type f
./ook
./ooks
; find . -name 'ook[s]?' -type f
[returns nothing]
; echo $?
0
답변1
정규식과 쉘 검색 패턴을 혼동하고 있습니다.
? 셸의 단일 문자를 나타냅니다.
? 정규식에서 이전 문자(또는 하위 패턴)가 선택 사항임을 나타냅니다.
노력하다:
find . -regex '.*ooks?' -type f
찾기 매뉴얼 페이지에서:
-정규 표현식 패턴 파일 이름이 정규식 패턴과 일치합니다. 이것은 게임이다 검색하는 대신 전체 경로를 사용하세요. 예를 들어, 파일을 일치시키려면 "./fubar3"이라는 이름의 정규식 ".*bar"를 사용할 수 있습니다. 또는 '.*b.*3'이지만 'f.*r3'은 아닙니다. 정규식 이해 find의 기본값은 Emacs 정규식이지만 작동합니다. 이를 변경하려면 -regextype 옵션을 사용하십시오.
답변2
이 답변은 적어도 GNU 찾기에 적용됩니다.
-name
일치를 위해 쉘 패턴을 사용하십시오. 정규식 일치를 수행하려면 다음을 사용하십시오 -regex
.
find . -regex '.*ook[s]?' -type f
-regex
전체 경로를 일치시키려면 emacs 정규식을 사용하십시오. 정규식 유형은 변경될 수 있습니다 -regextype
.