我想找到不以下划线开头的所有目录(在根级别,而不是递归)。
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”,这是正确的,但它也返回一个以下划线开头的子文件夹,这是不正确的。任何想法在这里出了什么问题?
答案 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);