찾기: 이름의 정규 표현식

찾기: 이름의 정규 표현식

내가 다음과 같이 쓴다고 가정해보자:

find . -regex "[0-9]{4}-[0-9]{2}-[0-9]{2}-(foo|bar).csv.gz" -printf "%f\n"

내 생각에는 이 명령이 작동해야 한다고 생각합니다. 다양한 정규식 유형 옵션과 다양한 정규식 형식을 반복했지만 조회를 통해 이 정규식이 작동하도록 할 수 없습니다. 여기서 find 및 정규식 파서와 관련하여 간단한 실수를 하고 있습니까?

답변1

찾기에는 -name정규 표현식이 사용되지 않습니다(질문의 원래 버전에서 사용됨). 쉘 글로브가 필요하지만 이는 유효한 쉘 글로브가 아닙니다. 테스트를 사용하고 싶지만 확장 정규식이나 이해 하고 표기 -regex할 수 있는 다른 스타일을 사용하도록 지시해야 합니다 . 마지막으로 와 달리 테스트에서는 전체 경로 이름을 확인하므로 다음과 같은 것이 필요합니다 .{N}foo|bar-name-regex

$ find . -regextype posix-extended -regex ".*/[0-9]{4}-[0-9]{2}-[0-9]{2}-(foo|bar).csv.gz" -printf "%f\n"
5678-34-56-bar.csv.gz
1234-12-12-foo.csv.gz

를 사용하려면 -name다음과 같이 하세요.

find . \( \
       -name "[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]-foo.csv.gz" \
    -o -name "[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]-bar.csv.gz" \
       \) -printf "%f\n"

답변2

또 다른 옵션은 fd도구입니다.

fd '[0-9]{4}-[0-9]{2}-[0-9]{2}-(foo|bar).csv.gz'

https://github.com/sharkdp/fd

답변3

적절한 파일 이름이 있는 경우(적어도 이 폴더에는) 다음 명령을 실행할 수 있습니다.

 find . | grep -E '[0-9]{4}-[0-9]{2}-[0-9]{2}-(foo|bar).csv.gz'

이렇게 하면 다양한 grep 옵션의 이점을 누릴 수 있습니다.

관련 정보