我有一棵看起来像这样的树:
src/
├── engine/
├── python/
└── scenes/
我知道我可以使用ls src/**/*
获取所有src
个子目录中的文件列表,但我不想输出src/engine/
目录中的任何文件。有没有简洁的方法可以从通配符中排除engine/
?
提前致谢。
答案 0 :(得分:1)
我假设您正在使用Python,因为该问题包含对目录Python
的引用。如果你不是,那么请忽略这个答案。
您可以在Python 2.6中使用Formic
从命令行,formic
可以像这样使用来实现您的目标(假设您当前在/path/to/src
:
formic -e "/engine/**"
-e
选项排除一个(或多个)Globs。在这种情况下,/engine/**
会直接在当前工作目录中排除engine
目录下的所有内容。
在Python中:
import formic
fileset = formic.FileSet(include="**", exclude="/engine/**", directory="/path/to/src")
Formic使用相对于工作目录的路径 - 这可能是src
的父路径,但如果没有,我建议使用完全限定的路径。在上面的示例中,搜索从src
开始,包含所有内容(**
)。
Formic遵循Ant的规则,其中排除了一堆文件(例如Git / Mercurial / CVS / SVN工作目录)。您可以使用额外参数default_excludes=false
关闭此行为。
您可以通过传递列表而不是字符串来指定多个包含和排除。
披露 - 我是此套餐的作者。