在运行Yosemite的Mac上,我的桌面上有一个文件目录:
29_foo10.bar
29_foo2.bar
29_foo20.bar
29_foo3.bar
我希望在foo
之后使用单个数字定位文件。当我使用find -name
时,我可以使用以下命令选择文件:
USERNAME=darthvader
DIRECTORY="/Users/$USERNAME/desktop/test"
for theProblem in $(find $DIRECTORY -type f -name '29_foo[0-9].bar'); do
cd $DIRECTORY
echo $theProblem
done
我在终端(29_foo2.bar
& 29_foo3.bar
)中返回了两个文件,但是当我尝试使用-regex
时它没有返回任何内容,代码:
for theProblem in $(find $DIRECTORY -type f -regex '29_foo[0-9].bar'); do
cd $DIRECTORY
echo $theProblem
done
我做了一些研究,发现OS X Find in bash with regex digits \d not producing expected results
所以我将我的代码修改为:
for theProblem in $(find -E $DIRECTORY -iregex '29_foo[0-9].bar'); do
我回来了:
没有这样的文件或目录
所以我试过了:
for theProblem in $(find -E $DIRECTORY -type f -regex '29_foo[0-9].bar'); do
但我仍然得到:
没有这样的文件或目录
所以我做了一些进一步的研究,找到了bash: recursively find all files that match a certain pattern并进行了测试:
for theProblem in $(find $DIRECTORY -regex '29_foo[0-9].bar'); do
我回来了:
没有这样的文件或目录
在兔子洞的下方,我找到了How to use regex in file find所以我试过了:
for theProblem in $(find $DIRECTORY -regextype posix-extended -regex '29_foo[0-9].bar'); do
终端告诉我:
find:-regextype:unknown primary或operator
为什么在Yosemite我无法使用-regex
定位文件?当我man regex
我退回手册时,我的bash版本是3.2.57。那么为什么-name
会在-regex
不起作用时发挥作用呢?
答案 0 :(得分:2)
您应该在find
中使用此正则表达式:
find "$DIRECTORY" -type f -regex '.*/29_foo[0-9]\.bar$'
变更是:
.*/
,因为在每个文件名之前会有DOT
或某个目录路径。$
,以避免匹配29_foo3.barn
,如果此文件名也在那里。-regex
中进行转义,否则会与任何角色匹配。find
命令适用于OSX - find
以及gnu - find
。