如何在find中使用regex

如何在find中使用regex,regex,find,Regex,Find,我试图在find中使用正则表达式。 这是我的命令: for GLOBALS_DEFINITIONS in `find . -type f -name -regex 'globalSettings_\d+.json'`; do 结果: find: paths must precede expression: 错误消息是由-name参数引起的。您应该使用-name或-regex,但不能同时使用: find . -type f -regex 'globalSettings_\d+.json' 但

我试图在find中使用正则表达式。 这是我的命令:

for GLOBALS_DEFINITIONS in `find . -type f -name -regex 'globalSettings_\d+.json'`; do
结果:

find: paths must precede expression:

错误消息是由
-name
参数引起的。您应该使用
-name
-regex
,但不能同时使用:

find . -type f -regex 'globalSettings_\d+.json'
但是,请注意,正则表达式必须匹配完整路径,而不仅仅是文件名。假设您只想匹配当前目录中的文件,可以执行以下操作:

find . -type f -regex './globalSettings_\d+.json'
如果深度匹配可以(这通常是首先使用
find
的原因),您可以执行以下操作:

find . -type f -regex '.*/globalSettings_\d+.json'
但是,关于
\d
部分,请注意默认情况下,
find
使用Emacs的regexp语法,其中
\d
与数字不匹配。您可以这样做:

find . -type f -regex '.*/globalSettings_[0-9]+.json'

删除
-name
。仍然不起作用。正则表达式必须匹配整个路径,而不仅仅是文件名。并且语法是Emacs regexp的语法,除非您使用
-regextype
对其进行更改。