옵션을 사용하여 find의 올바른 사용법을 알 수 없습니다 -regex
.
예를 들어, 다음 예가 주어집니다.
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]'
정규식 대신 와일드카드 패턴을 사용합니다.
GNU를 사용하려면 find
다음 -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
제대로 작동합니다.