find에서 정규 표현식을 사용하는 데 문제가 있습니다.

find에서 정규 표현식을 사용하는 데 문제가 있습니다.

find정규식 플래그를 사용하는 데 많은 문제가 있습니다. 나는 egrep다음과 같은 파일에서 날짜 패턴을 찾기 위해 단독으로 사용하고 있습니다.

egrep '[0-9]{4}-[0-9]{2}-[0-9]{2}' 

CCYY-MM-DD 형식으로 날짜를 반환합니다. 을(를) 사용하여 동일한 패턴을 적용하려고 합니다 find. 시도해 보았습니다.

find . -regextype egrep -regex "[0-9]{4}-[0-9]{2}-[0-9]{2}"
find . -type f -regex "[0-9]{4}-[0-9]{2}-[0-9]{2}"

중괄호를 백 슬래시하려고 시도했습니다 ...

find . -type f -regextype egrep -regex "[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}"

이들 중 어느 것도 아무것도 반환하지 않는 것 같습니다. 오류 메시지도 없고 출력도 없습니다... 출력을 파일로 리디렉션하려고 시도했지만 아무 것도 없습니다...

find정규식 사용에 대한 좋은 리소스를 찾는 것은 어렵습니다 . 누구든지 도울 수 있다면 감사하겠습니다. 나는 어떤 종류의 정규식 지원에도 반대하지 않지만 전체 줄 대신 일치하는 항목만 반환되기 때문에 플래그를 find좋아합니다 . 하지만 실제로는 파일 이름이 위 패턴과 일치하는 디렉터리에서 모든 파일을 찾아야 합니다.egrep-ofind

답변1

귀하의 예는 작은 따옴표와 큰 따옴표를 혼합합니다. find는 전체 파일 이름과 일치하는 패턴을 예상하므로 "*"로 패턴을 시작/끝내려고 합니다.

설명하는 패턴을 가진 모든 파일을 찾습니다.

find yourpath -name "*[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]*"

그러나 regextype을 사용하려면 "posix-egrep"이 필요하며 정규식은 전체 경로와 일치해야 한다는 점에 주의하세요.

find yourpath -regextype posix-egrep  -regex ".*[0-9]{4}-[0-9]{2}-[0-9]{2}.*"

답변2

첫 번째 예는 다음과 같아야 합니다.

find yourpath -name "*[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]*"
                               ^

네 번째 괄호가 잘못되었습니다.

관련 정보