
인접한 소문자와 대문자 사이에 공백을 두는 것을 목표로 파일을 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])[^/]*'