N개의 문자 하위 집합이 포함된 디렉터리 이름을 비재귀적으로 일치시키는 방법( 사용 find
)
내 특별한 경우에는 6자리 디렉터리 이름만 원합니다. 이것은 작동하지만 구체적이지 않습니다(숫자와 함께 모든 디렉토리 이름이 제공됩니다).
find . -maxdepth 1 -type d -regex './[0-9]+'
ls -d +([0-9])
이 방법도 작동하지만 숫자로 시작하고 뒤에 아무 것도 오는 디렉터리 이름을 제공합니다.
find . -maxdepth 1 -type d -name '[0-9]*'
내가 읽은 바에 따르면 정규식 대신 glob을 사용하기 때문에 N번 일치하는 방법을 모르겠습니다 ls
(그리고 glob에 대해서는 아무것도 모릅니다). 내가 이해하지 못하는 것은 다음 중 어느 것도 사용할 수 없다는 것입니다 find
.
find . -maxdepth 1 -type d -regex './[0-9]{6}'
find . -maxdepth 1 -type d -name '[0-9]{6}'
find . -maxdepth 1 -type d -name '[0-9]+'
나는 정규 표현식을 여러 번 사용해 보았지만 내 패턴에 무엇이 문제인지 이해하지 못합니다(그것을 지정해야 한다는 것도 놀랍습니다 ./
) -regex
.
답변1
regex
GNU의 기본 유형 은 간격을 지원하지 않는다는 것 find
입니다 . emacs
다른 정규식 유형을 지정할 수 있습니다. 예를 들어 posix-egrep
이렇게 하면 문제가 해결됩니다.
find . -maxdepth 1 -type d -regextype posix-egrep -regex './[0-9]{6}'