Bash命令仅用于输出基于正则表达式的目录

时间:2015-03-19 22:07:31

标签: regex bash

我对shell命令不太了解。但我想知道是否有办法列出所有只包含某个正则表达式部分的目录(没有文件)?

例如:

a/
   /dir1
      /d_332
         file1.txt
   /dir2
      /d_123
         file2.txt
   /dir3
      /dir4
         /dir5
            /d_444
               file3.txt 

我要使用的正则表达式是d_\d+来查找以d_开头并且有一系列数字的所有目录。这是Python正则表达式。我不确定与bash正则表达式相比有多么不同

这个命令会给我输出:

a/dir1/d_332/
a/dir2/d_123/
a/dir3/dir4/dir5/d_444/

2 个答案:

答案 0 :(得分:2)

使用find实用程序:

find path -type d -regex '.*/d_[0-9]+'
在您的情况下,

path将为a;它是要搜索的目录树find的顶部。

这使用两个过滤器:

  1. -type d过滤目录,
  2. -regex '.*/d_[0-9]+'过滤与正则表达式.*/d_[0-9]+匹配的路径(完整路径)。正则表达式应用于完整路径,因为find打印它,而不仅仅是它的一部分;这就是为什么开始时.*是必需的。
  3. 目录树中与两个过滤器匹配的条目将被打印。

    还有一个-regextype选项,允许您使用几种不同风格的正则表达式,因此您可能需要查看联机帮助页。

答案 1 :(得分:1)

试试这个:

 find . -type d -name 'd*[0-9]*'