在D火卫一中是否有一个等价物?

在D火卫一中是否有一个等价物?,d,glob,phobos,D,Glob,Phobos,在python中,我可以使用glob来搜索路径模式。例如: 导入全局 对于glob.glob(“/usr/*/python*”)中的条目: 打印(条目) 将打印以下内容: /usr/share/python3 /usr/share/python3-plainbox /usr/share/python /usr/share/python-apt /usr/include/python3.5m /usr/bin/python3 /usr/bin/python3m /usr/bin/python2.

在python中,我可以使用glob来搜索路径模式。例如:

导入全局
对于glob.glob(“/usr/*/python*”)中的条目:
打印(条目)
将打印以下内容:

/usr/share/python3
/usr/share/python3-plainbox
/usr/share/python
/usr/share/python-apt
/usr/include/python3.5m
/usr/bin/python3
/usr/bin/python3m
/usr/bin/python2.7
/usr/bin/python
/usr/bin/python3.5
/usr/bin/python3.5m
/usr/bin/python2
/usr/lib/python3
/usr/lib/python2.7
/usr/lib/python3.5
我将如何在D中创建glob或使glob等效

----于2017年9月12日更新---

我写了一个小的D模块来做globin D:

也许你正在寻找

以下是文档中的示例:

//迭代当前目录中的所有D源文件及其所有
//子目录
auto-dFiles=dirEntries(“,“*.{d,di}”,SpanMode.depth);
foreach(d;d文件)
书面(d.姓名);

如果您只在Posix系统上工作,可以直接调用
glob.h
。下面是一个简单的示例,它显示了与Posix API接口是多么容易:

void main()
{
进口std.stdio;
导入glob:glob;
foreach(条目;glob(“/usr/*/python*”)
书面记录(条目);
}
例如,您可以使用
rdmd main.d
(rdmd执行简单的依赖关系管理)或
dmd main.d glob.d
编译此文件,它会产生与您在我的机器上的输出类似的输出

glob.d
由一个方便的d型包装器(第一个函数)生成并增强。请注意,这并不完美,更好的方法是公开一个范围API,而不是分配整个阵列

<代码> /* Copyright(C)1991~2016自由软件基金会。 此文件是GNUC库的一部分。 GNUC库是自由软件;您可以重新分发它和/或 根据GNU小公众的条款对其进行修改 自由软件基金会发布的许可证;任何一个 许可证的2.1版,或(由您选择)任何更高版本。 分发GNU C库是希望它会有用, 但无任何保证;甚至没有任何关于 适销性或适合某一特定目的。见GNU 有关更多详细信息,请参阅较低的通用公共许可证。 您应该已经收到GNU Lesser General Public的副本 许可证以及GNUC库;如果没有,请参阅 . */ 字符串[]全局(字符串模式) { 输入标准字符串; 字符串[]结果; glob_t glob_结果; glob(pattern.toStringz、0、null和glob_结果); 对于(uint i=0;ienum GLOB_ERR=1基本上您不需要使用头、C等等来完成所有这些复杂的工作。这应该可以做到:

auto dirIter = dirEntries("/usr", "*/python*", SpanMode.shallow);
foreach(dirFile; dirIter) {
    // Process the result as needed

上面的答案没有一个与Windows和Linux上的Glob完全相同。所以我做了一个小的D模块,它以正确的方式运行。希望人们发现它有用:

导入标准stdio:stdout;
导入glob:glob;
foreach(条目;glob(“/usr/*/python*”){
stdout.writefln(“%s”,条目);
}

这不太管用。glob模式似乎无法跨目录工作。
dirEntries
是一个范围,因此您可以通过它进行筛选,但它当然会遍历所有文件:/D的标准库只能进行路径筛选(例如
dirEntries
)。值得一个增强请求吗?即使这不是使用火卫一,它看起来是一个足够好的解决方案。谢谢。别忘了为火卫一干杯;-)将只在一个级别上迭代-因此您的示例不会返回任何文件。见例。不幸的是,使用D还没有简单的方法来实现这一点:/我猜OP想列出所有以
python
开头并位于
/usr/*
,否?)的目录。是的,但是带有
usr
shall
的dirEntries看起来只有一层深(例如
/usr/share