내가 쓴다고 가정해보자:
find . -regex "[0-9]{4}-[0-9]{2}-[0-9]{2}-(foo|bar).csv.gz" -printf "%f\n"
이 명령은 제 생각엔 제대로 작동할 것 같습니다. 다양한 정규식 옵션과 다양한 정규식 형식을 반복했지만 이러한 종류의 정규식이 find를 통해 작동하도록 할 수는 없습니다. find 및 정규식 파서와 관련하여 내가 잘못 알고 있는 간단한 것이 있습니까?
답변1
Find's는 -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
답변3
적절한 파일 이름이 있다면(적어도 이 폴더에는) 다음과 같은 명령을 실행할 수 있습니다.
find . | grep -E '[0-9]{4}-[0-9]{2}-[0-9]{2}-(foo|bar).csv.gz'
이렇게 하면 다양한 grep 옵션의 이점을 누릴 수 있습니다.