그래서 다음 명령을 받았습니다 find
.
find ./test-folder -type d -mindepth 1 -regex "^.*/\d\{4\}-\d\{2\}-\d\{2\}$"
이전에 이 폴더를 만든 적이 있고 ./testfolder
그 mkdir testfolder
안에 폴더도 만들었습니다 mkdir ./testfolder/2022-10-12
.
알파인 기반 도커 컨테이너에서 Bash를 사용하여 명령을 실행하면 find
모든 것이 제대로 작동하고 출력이 표시됩니다./path/to/testfolder/2022-10-12
Lubuntu 시스템의 bash에서 동일한 명령을 실행하면 아무것도 출력되지 않습니다.
나는 find 명령이나 그 주변의 어떤 것도 수정하지 않았으며 모든 시스템에서 작동할 것으로 예상하지만 정규식은 다르게 작동하는 것 같습니다. 일치가 *
작동하고 무한한 수의 숫자와 일치 하지만 수량자를 \d*
일치시키거나 사용하려고 하면 더 이상 어떤 것과도 일치하지 않습니다.-
{4}
여기서 무엇이 잘못되었을 수 있습니까? 또한 LUbuntu에서 어떻게 실행시킬 수 있나요?
답변1
의견을 통해 실제 질문은 " \d{4}-\d{2}-\d{2}
LUbuntu에서 해당 항목을 일치시키는 방법"이라는 것을 추론했습니다.
두 가지 문제가 있습니다.
- 먼저 에서 설명한 대로Alpine에서 "find" 명령이 "?"를 탈출해야 하는 것처럼 보이지만 Ubuntu에서는 그렇지 않은 이유는 무엇입니까?, 기본 RegEx 구문은 AlpineLinux와 LUbuntu에서 다릅니다.
- 두 번째로
\d
캐릭터 클래스는 다음과 같습니다."PCRE" 스타일 확장find
Lubuntu와 함께 제공되는 GNU에서는 지원되지 않는 기본 정규 표현식의 일부입니다.
따라서 이 -regextype
옵션을 사용하여 필요한 기능이 있는 RegEx 유형을 명시적으로 선택한 다음 해당 스타일을 따라야 합니다. 귀하의 경우에는 다음을 사용할 수 있습니다확장 정규식:
find ./testfolder/ -mindepth 1 -regextype "egrep" -regex '^.*/[[:digit:]]{4}-[[:digit:]]{2}-[[:digit:]]{2}$'