143자보다 긴 파일 이름에 대한 검색 명령이 있습니까?

143자보다 긴 파일 이름에 대한 검색 명령이 있습니까?

먼저 배경 지식: Synology NAS의 암호화되지 않은 공유 폴더를 암호화된 폴더로 변환하려고 시도했지만 다음 오류가 표시되었습니다.

시놀로지 NAS 오류

그래서 문제의 파일을 찾아서 이름을 바꾸고 싶습니다. 나는 다음 명령을 생각해 냈습니다 grep. grep -rle '[^\ ]\{143,\}' *그러나 경로가 143자를 초과하는 모든 파일을 출력합니다.

#recycle/Music/TO SORT/music/H/Hooligans----Heroes of Hifi/Metalcore Promotions - Heroes of Hifi - 03 Sly Like a Megan Fox.mp3
...

내가 원하는 것은 분할을 grep /한 다음 검색을 수행하는 것입니다. 이 문제를 해결하기 위한 효율적인 명령에 대한 아이디어가 있습니까(디렉터리는 수십만 개의 파일을 쉽게 포함할 수 있음)?

답변1

비록 GNU"findutils-default" 정규식 구문간격 수량자는 제공되지 않습니다. 다른 수량자를 선택하는 경우 GNU에서 테스트를 사용할 {n,m}수 있습니다 -regex. 예:findregextype

find . -regextype posix-extended -regex '.*/[^/]{143,}$'

또는

find . -regextype egrep -regex '.*/[^/]{143,}$'

또는

find . -regextype posix-basic -regex '.*/[^/]\{143,\}$'

등. 이스케이프 여부에 관계없이 간격을 regextypes지원하는 다른 기능이 있을 수 있습니다 .{n,m}

find결과를 별도의 명령으로 파이핑하는 대신 grep이는 개행 전체에서 일치합니다(즉, find정규식 스타일은 이름과 달리 .기본적으로 개행과 일치합니다).

답변2

노력하다:

find /your/path | grep -E '[^/]{143,}$'

답변3

이미 위치 데이터베이스가 있는 경우 매우 빠릅니다.

locate --regex '.*/[^/]{143,}$'

관련 정보