내가 다음과 같이 쓴다고 가정해보자:
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
답변3
적절한 파일 이름이 있는 경우(적어도 이 폴더에는) 다음 명령을 실행할 수 있습니다.
find . | grep -E '[0-9]{4}-[0-9]{2}-[0-9]{2}-(foo|bar).csv.gz'
이렇게 하면 다양한 grep 옵션의 이점을 누릴 수 있습니다.