递归搜索以字符串开头的目录,用于匹配模式

时间:2015-06-03 16:20:14

标签: regex linux bash shell unix

我正在尝试查找名称中的所有目录,这些目录在以某个字符串开头的目录中为五位数,在此示例中为:test。目录结构如下:

   |-1
     |---12324
   |-otherFile
     |---23424
   |-someFile
     |---22343
   |-test
     |---22343
     |---23424
   |-testTemp
     |---23454
     |---adsf
   |-testTemp1
     |---34566
   |-testTemp2
     |---34543

我想仅在以test开头的文件夹中获取5位数名称,忽略目录1otherFilesomeFile

我正在尝试这样的事情:

find ./test* d -name "\d+" print

给出错误

  

find: print: unknown primary or operator

grep -r "./test*/\d{5}"

给出错误

  

grep: warning: recursive search of stdin

这些错误意味着什么?我怎样才能进行此搜索?如果文件所在的目录也被打印出来也会很好。我在Mac终端。

2 个答案:

答案 0 :(得分:1)

您可以在-regex中尝试find optin:

find ./test -regextype posix-egrep -type d -regex '.*/[0-9]{5}$'

在OSX上使用:

find -E ./test -type d -regex '.*/[0-9]{5}$'

或没有正则表达式:

find ./test -type d -name '[0-9][0-9][0-9][0-9][0-9]'

答案 1 :(得分:-1)

您可以使用类似的东西(应该存在更简单的版本):

find . -type d -name "test*" | xargs -I % sh -c 'find % -type d -regextype sed -regex ".*[0-9]\{5\}"'

首先,查找带有find

的test *文件夹
find . -type d -name "test*"

然后,从第一个查找结果,使用xargs使用正则表达式sed查找5位数文件夹:

find % -type d -regextype sed -regex ".*[0-9]\{5\}"

这意味着,我希望.*以5位数字结尾[0-9]\{5\}