首先介绍一些背景信息:我尝试将 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”正则表达式语法不提供间隔量词,如果您选择不同的,{n,m}
则可以-regex
在 GNU 中使用测试,例如: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,}$'