我试图运行此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 just
foo`。你想要这样的东西:
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])[^/]*'