Я хочу найти все каталоги (на корневом уровне, не рекурсивные), которые не начинаются с подчеркивания.
getcwd () = / Пользователи / пример / проект
Пример каталога:
/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
Таким образом, он возвращает «тест», который является правильным, но он также возвращает подпапку внутри той, которая начинается с подчеркивания, что неверно. Есть идеи, что здесь не так?
Это работает:
$directories = glob(getcwd() . '/[!^_]*', GLOB_ONLYDIR);
Но надеялся на решение с использованием поиска Symfony.
Я нашел в 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());
}
Попробуйте с $ finder-> exclude ($ dirs);