find 유틸리티가 대괄호 기호를 인식하지 못합니다.

find 유틸리티가 대괄호 기호를 인식하지 못합니다.

현재 폴더에 두 개의 파일이 있습니다.


SubmitWeb.mSubmit.m

다음은 find이 두 파일을 표시하지 않습니다.

find . -regex .*submit\(Web\)?\.m

그러나 위의 정규식은 emacs 버퍼에서 잘 작동합니다. 즉, .을 사용하여 샘플 문자열에 대한 emacs 버퍼를 검색합니다 isearch-forward-regexp.

기본값 regextype은 입니다 find.emacs

find하지만 파일 이름에 여는 괄호 로 처리되는 것 같은데 \(, 이는 emacs 정규식 구문과 다릅니다.

이것이 버그입니까, 아니면 find매뉴얼 페이지를 오해하고 있습니까?

답변1

문제는 \(애초에 쉘에 의해 해석되는 것 같습니다.

예를 들어 다음과 같은 디렉터리가 있습니다.

foo(.test

그 다음에

ls foo\(.text

그리고

ls "foo(.text"

둘 다 유효합니다.

따라서 다음이 작동합니다.

find . -regex ".*submit\(Web\)?\.m"

편집하다:

작은 따옴표도 여기에서 작동합니다.

작은따옴표와 큰따옴표의 차이점은 다음 문서를 참조하세요.Bash의 작은 따옴표와 큰 따옴표

관련 정보