내 Samsung Galaxy S는 이름에 첫 번째 점 뒤에 긴 문자열이 포함된 파일을 좋아하지 않습니다. 소프트웨어의 일부에 파일 확장자에 비해 너무 짧은 버퍼가 있는 것 같습니다. /media/sd에서 Micro-SD 카드에 설치된 파일 이름이 첫 번째 점 뒤의 5자 이상인 모든 파일을 어떻게 찾을 수 있습니까?
찾기 매뉴얼 페이지를 읽으면서 생각합니다.
find . -regex '.*\..\{5,\}'
작동하지만 히트가 생성되지 않으므로 어떻게 든 올바른 정규식을 얻지 못합니다.
답변1
문제는 find가 사용하는 기본 정규식 유형이 emacs 스타일이라는 것입니다. 찾고있는Emacs 스타일 정규식에 대한 문서구문을 포함하지 않음 \{n,\}
- find의 emacs 스타일 정규식 구현이 이를 지원하지 않는다고 믿게 됩니다. 이것emacs-wiki에서는 이것을 유효한 것으로 나열합니다., 그러나 항상 그런 것은 아닙니다.
이렇게 하면 정규 표현식이 다음과 같은 출력을 생성한다는 것을 알았습니다.
$ find . -regextype posix-basic -regex '.*\..\{5,\}'
답변2
기본 정규식 구현에 중괄호가 항상 포함되는 것은 아닙니다. GNU find 또는 Busybox find가 있는지는 모르겠습니다. Busybox에는 GNU find의 모든 기능이 없을 수도 있습니다.
확장자가 긴 파일을 검색하는 이식 가능한 방법은 find . -name '*.?????*'
.
정규식은 이름에 점이 포함된 디렉터리 아래의 대부분의 파일과 일치합니다.