搜索文件名超过 143 个字符的命令?

搜索文件名超过 143 个字符的命令?

首先介绍一些背景信息:我尝试将 Synology NAS 上的非加密共享文件夹转换为加密文件夹,但看到以下错误:

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 中使用测试,例如: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,}$'

相关内容