특정 패턴과 일치하는 파일을 찾으려고 시도하고 있지만 아래 명령을 실행하려고 하면 패턴과 일치해야 하는 파일이 있음에도 불구하고 결과가 반환되지 않습니다.
find . -maxdepth 1 -regextype posix-extended -regex ".*/s_[a-zA-Z]_[a-zA-Z]\.png" -exec echo {} \;
나는 .*/
전체 경로와 일치한다는 것을 알고 있지만 그것이 정확히 무엇을 의미하는지 잘 이해하지 못합니다.
예를 들어 일치해야 하는 파일은 다음과 같습니다.
- s_choose_blue.png
- s_choose_red.png
- s_new_blue.png
답변1
정규식의 실제 문제는 일치해야 하는 항목과 일치하지 않는다는 것입니다. 분석하려면:
.*/
– 임의의 문자, 여러 번, 그 뒤에 슬래시가 옵니다. 이것은 기본적으로 실제 파일 이름 앞에 디렉토리 목록을 사용하므로./
(예에서와 같이) 문자 그대로 일치하지만./some/other/dir/
마지막 슬래시까지 일치합니다.이는 정규식이 기본적으로 "탐욕적"이기 때문에 작동합니다. 즉, 가능한 한 많이 일치한다는 의미입니다. 본질적으로 이 부분을 사용하면 실제 파일 이름을 검색하고 결과에서 경로를 제거할 수 있습니다.
.*/
요약하자면, 관심 있는 것이 실제 파일 이름뿐이라면 정규식 앞에 가 필요합니다 . 파일 경로의 일부 부분도 일치시켜야 하는 경우에는 다음을 사용할 수 없습니다..*/
s_
– 이것은 귀하의 예에서는 잘 작동합니다[a-zA-Z]
– 이것은 단지 소비한다하나이 클래스의 캐릭터_
– 그 뒤에 밑줄이 옵니다.[a-zA-Z]
– 다시 이어서하나성격\.png
– 문자 그대로 점과 확장자가 일치합니다.
따라서 정규식을 다음과 같이 변경해야 합니다.
.*/s_[a-zA-Z]+_[a-zA-Z]+\.png
+
기본적으로 이전 중 하나 또는 여러 개를 나타내는 를 사용해야 합니다 .