Symfony Finder:查找除以下划线开头的所有目录

时间:2014-12-16 12:09:44

标签: php regex symfony finder

我想找到不以下划线开头的所有目录(在根级别,而不是递归)。

getcwd()= / Users / example / project

目录示例:

/Users/example/project/_pictures
/Users/example/project/_graphics
/Users/example/project/test

我尝试使用以下代码段:

$directories = $this->container->get('finder')
    ->directories()
    ->in(getcwd())
    ->notName('_*')
    ->depth(0);

但这似乎又回来了:

/Users/example/project/_pictures/home
/Users/example/project/test

所以它返回“test”,这是正确的,但它也返回一个以下划线开头的子文件夹,这是不正确的。任何想法在这里出了什么问题?

3 个答案:

答案 0 :(得分:1)

这有效:

$directories = glob(getcwd() . '/[!^_]*', GLOB_ONLYDIR);

但希望使用Symfony finder的解决方案。

答案 1 :(得分:1)

我在Finder::searchInDirectory找到了

if (static::IGNORE_DOT_FILES === (static::IGNORE_DOT_FILES & $this->ignore)) {
    $this->notPaths[] = '#(^|/)\..+(/|$)#';
}

使用此修改并且它可以工作:)

$finder->notPath('#(^|/)_.+(/|$)#')

<强>更新

这是我的代码:

$finder = Finder::create()
    ->files()
    ->name('*.twig')
    ->notPath('#(^|/)_.+(/|$)#') // Ignore path start with underscore (_).
    ->ignoreVCS(true)
    ->ignoreDotFiles(true)
    ->ignoreUnreadableDirs()
    ->in(__DIR__);

foreach ($finder as $file) {
    var_dump($file->getRelativePath());
}

答案 2 :(得分:0)

尝试使用$ finder-&gt; exclude($ dirs);