如何使用字符串列出所有子目录,但不包含匹配的子目录

问题描述:

在bash脚本中,我想解析所有子目录的名称并查找具有匹配字符串的所有子目录,但我不想要匹配的子目录。我对基于目录结构的$ PATH和$ PYTHONPATH变量的自动构建感兴趣。如何使用字符串列出所有子目录,但不包含匹配的子目录

下面是一个例子: 假设我想通过我的〜/ dev和〜/ bin文件夹,并找到所有的bin /目录下的子目录,我将在shell中运行程序。我可以得到一个清单,

$ ls -lR $HOME/bin $HOME/dev |grep "\/" | grep "bin:" 
/Users/dat5h/bin: 
/Users/dat5h/bin/project/bin: 
... 

这些都可以附加到$PATH,拥有所有可用的脚本就可以运行。

但是,比方说,我正在搜索目录与python模块和包添加到$PYTHONPATH。我可以想象,寻找所有以/py-开头的目录。所以,我尝试:

$ ls -lR $HOME/bin $HOME/dev |grep "\/" | grep "/py-" 
/Users/dat5h/bin/py-test: 
/Users/dat5h/bin/py-test/test-package: 
/Users/dat5h/bin/py-test/test-package/nested-test: 
... 

我的想法是,我不想将包目录和子目录放入路径。我敢肯定,这将是奇怪的,但我实际上是新的Python,所以建议会有所帮助。我将如何构建一个测试用例来仅使用py- *获取目录,而不使用随后的子目录?

我想:

$ ls -lR $HOME/bin $HOME/dev |grep "\/" | egrep "/py-.*[^/]:" 

但这并不会得到这份工作无论是完成的。也许更好的正则表达式?任何帮助将不胜感激!


SOLUTION

的解决方案,我结束了满意的建议之下用cutoms正则表达式查找:

find $HOME/bin $HOME/dev -type d -regex ".*\/py\(\w\|-\w\)*"

这会找到〜/ bin中的所有子目录和〜/ dev,它们是“pySOMETHING”,“py-SOMETHING”,“pySOME_THING_ELSE”或“py-SOME_THING_ELSE”的一些变体,但不抓取任何子目录,除非它们也匹配这个stri NG。这可以确保我可以使用python模块/包对我的所有目录进行一些简单的命名约定,并以这种方式导入它们,而不会意外地能够在没有层次结构的情况下导入嵌套的包。

这是否:

find -type d -regex ".*py.*bin.*" 

给你一些开始?

+0

与我的ls/grep混乱相比,发现表达式对于查找目录非常方便!另外,我最终找到了正确的正则表达式:'find $ HOME/bin $ HOME/dev -type d -regex“。* \/py \(\ w \ | - \ w \)*”' – scicalculator 2012-03-15 12:18:27