尽管有效,但正则表达式不使用“find”匹配文件

尽管有效,但正则表达式不使用“find”匹配文件

我试图运行此find命令来匹配具有驼峰名称的文件,目标是在相邻的小写和大写字母之间放置一个空格,但它不匹配任何内容:

find -E . -regex "([a-z])([A-Z])"

我尝试匹配的文件的示例是

./250 - ErosPhiliaAgape.mp3

我已经在这个文件上测试了这个正则表达式这里并且匹配成功。

我的命令做错了什么find

答案1

您可能正在寻找类似的东西:

find . -name "*[a-z][A-Z]*"

答案2

Find-regex匹配整个路径,而不仅仅是文件名。这意味着要查找/path/to/foo,您需要-regex'.*foo' , and not justfoo`。你想要这样的东西:

find  . -E -regex ".*[a-z][A-Z].*"

使用 glob 会更简单,并且更-name 简单建议然而,通过 SYN 而不是正则表达式。

答案3

发生这种情况是因为([a-z])([A-Z])不匹配./250 - ErosPhiliaAgape.mp3。事实上,([a-z])([A-Z])只能精确匹配 2 个字符 ---regex锚定的匹配整个路径。如果你想使用-regex搜索一个文件名称包含一个正则表达式,你可以这样写(BSD/macOSfind语法):

find -E . -regex '.*/[^/]*([a-z])([A-Z])[^/]*'

GNU 查找等效项类似于

find . -regextype posix-extended -regex '.*/[^/]*([a-z])([A-Z])[^/]*'

相关内容