-regex
옵션 과 함께 find의 올바른 사용법을 알 수 없습니다 .
예를 들어, 다음 예에서는:
Morcheeba/Big Calm/02 Shoulder Holster.flac
Morcheeba/Big Calm/02. Shoulder Holster.flac
path/to/file/## filename.ext
점 없이 형식의 문자열만 일치시키고 싶습니다 .
나는 다음을 시도했습니다.
find Morcheeba/ -regextype egrep -iregex ".*[0-9]{2}*[a-z]*flac$"
그리고 약간의 변형이 있지만 항상 모든 파일을 얻거나 아무것도 얻지 못합니다.
뭐가 문제 야?
미리 감사드립니다.
답변1
-regex
/ (GNU 확장자) 는 파일 이름뿐만 아니라 전체 경로의 -iregex
표준 일치와 같습니다 .-path
해당 파일을 찾고 싶다면이름(반대로길)는 소수점 이하 2자리로 시작하고 그 뒤에 소수점이 아닌 숫자가 오고 로 끝나는 경우 .flac
이식 가능합니다.
find . -name '[0-9][0-9][!0-9]*.[fF][lL][aA][cC]'
01.flac
일치할 수 없기 때문에 일치하지 [!0-9]
않습니다. 대신 다음과 같이 작성할 수 있습니다.
find . -name '[0-9][0-9][!0-9]*' -name '*.[fF][lL][aA][cC]'
정규 표현식이 아닌 와일드카드 패턴을 사용합니다.
find
GNU 를 사용하려면 -iregex
다음과 같습니다.
find . -regextype egrep -iregex '.*/[0-9]{2}[^0-9/][^/]*\.flac'
find . -regextype egrep -iregex '.*/[0-9]{2}([^0-9/][^/]*)?\.flac'
즉, 정규 표현식의 나머지 부분이 /
.
답변2
@steeldriver가 제안한 대로 정규식이 .*[0-9]{2}[^.]*\.flac
제대로 작동했습니다.