먼저 배경 지식: Synology 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
. 예:find
regextype
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,}$'