정규식은 유효하지만 '찾기'를 사용하여 파일과 일치하지 않습니다.

정규식은 유효하지만 '찾기'를 사용하여 파일과 일치하지 않습니다.

인접한 소문자와 대문자 사이에 공백을 두는 것을 목표로 파일을 camelCase 이름과 일치시키기 위해 이 명령을 실행하려고 하는데 find아무 것도 일치하지 않습니다.

find -E . -regex "([a-z])([A-Z])"

일치시키려는 파일의 예는 다음과 같습니다.

./250 - ErosPhiliaAgape.mp3

이 파일에서 이 정규식을 테스트했습니다.여기그리고 경기는 성공적이었습니다.

내 명령에 내가 뭘 잘못하고 있는 거지 find?

답변1

비슷한 것을 찾고 있을 수도 있습니다.

find . -name "*[a-z][A-Z]*"

답변2

Find는 -regex파일 이름뿐만 아니라 전체 경로와 일치합니다. 즉, 을 찾으려면 '.*foo' foo`가 /path/to/foo필요합니다 . 당신은 다음과 같은 것을 원합니다 :-regex, and not just

find  . -E -regex ".*[a-z][A-Z].*"

glob을 사용하는 것이 더 간단하고 -name 더 간단 합니다.제안그러나 정규식 대신 SYN을 전달하세요.

답변3

([a-z])([A-Z])이는 불일치 로 인해 발생합니다 ./250 - ErosPhiliaAgape.mp3. 실제로 ([a-z])([A-Z])정확히 일치하는 문자는 2개뿐입니다. -regex고정된전체 경로를 일치시킵니다. 다음을 사용하여 -regex파일을 검색 하려면이름에 다음이 포함됨정규식의 경우 다음과 같이 작성할 수 있습니다(BSD/macOS find구문).

find -E . -regex '.*/[^/]*([a-z])([A-Z])[^/]*'

GNU는 다음과 유사한 등가물을 찾습니다.

find . -regextype posix-extended -regex '.*/[^/]*([a-z])([A-Z])[^/]*'

관련 정보