如何列出所有具有字符串但不匹配的子目录的子目录

时间:2012-03-15 11:01:07

标签: regex bash parsing path pythonpath

在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-.*[^/]:"

但这也不能完成工作。也许是一个更好的正则表达式?任何帮助将不胜感激!


我最满意的解决方案是下面提出的使用cutom regex的建议:

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

这将找到〜/ bin和〜/ dev的所有子目录,它们是“pySOMETHING”,“py-SOMETHING”,“pySOME_THING_ELSE”或“py-SOME_THING_ELSE”的变体,但不会抓取那些子目录,除非他们也匹配这个字符串。这确保了我可以使用python模块/包为我的所有目录设置一些简单的命名约定,并以这种方式导入它们,而不会意外地导入没有层次结构的嵌套包。

1 个答案:

答案 0 :(得分:0)

这是:

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

给你一些开始?