Ant 有一个很好的方法来选择文件组,最方便地使用 ** 来指示目录树。例如
**/CVS/* # All files immediately under a CVS directory.
mydir/mysubdir/** # All files recursively under mysubdir
Run Code Online (Sandbox Code Playgroud)
更多示例可以在这里查看:
http://ant.apache.org/manual/dirtasks.html
你会如何在 python 中实现这个,这样你就可以做类似的事情:
files = get_files("**/CVS/*")
for file in files:
print file
=>
CVS/Repository
mydir/mysubdir/CVS/Entries
mydir/mysubdir/foo/bar/CVS/Entries
Run Code Online (Sandbox Code Playgroud)
抱歉,距离你的手术已经过去很长时间了。我刚刚发布了一个 Python 包,它就是这样做的——它被称为 Formic,可以在PyPI Cheeseshop上找到。使用 Formic,您的问题可以通过以下方式解决:
import formic
fileset = formic.FileSet(include="**/CVS/*", default_excludes=False)
for file_name in fileset.qualified_files():
print file_name
Run Code Online (Sandbox Code Playgroud)
有一个稍微复杂的地方:default_excludes。Formic,就像 Ant 一样,默认排除 CVS 目录(因为在构建过程中从其中收集文件的大部分是危险的),问题的默认答案将导致没有文件。设置 default_excludes=False 会禁用此行为。