在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模块/包为我的所有目录设置一些简单的命名约定,并以这种方式导入它们,而不会意外地导入没有层次结构的嵌套包。
答案 0 :(得分:0)
这是:
find -type d -regex ".*py.*bin.*"
给你一些开始?