Поскольку вы используете PHP версию более 5.4, вы можете использовать встроенные классы PHP DirectoryIterator и FilterIterator для достижения вашей цели. С помощью класса Filter вы можете объявить, какие файлы и каталоги приняты итератором. Кроме того, встроенные классы итераторов работают быстрее и не мешают потреблению памяти. Вот небольшой пример.
<?php
$directory = new RecursiveDirectoryIterator($path, FilesystemIterator::FOLLOW_SYMLINKS);
$filter = new RecursiveCallbackFilterIterator($directory, function($current, $key, $iterator) {
// Skip hidden files and directories.
if ($current->getFilename()[0] === '.') {
return FALSE;
}
if ($current->isDir()) {
// Only recurse into intended subdirectories
return $current->getFilename() === 'wanted_dirname';
} else {
// Only consume files of interest.
return strpos($current->getFilename(), 'wanted_filename') === 0;
}
});
$iterator = new RecursiveIteratorIterator($filter);
$files = [];
foreach ($iterator as $info) {
$files[] = $info->getPathname();
}
Массив $files
содержит все файлы, которые проходят фильтр обратного вызова. Эти файлы вы можете скопировать, куда захотите. Класс RecursiveCallbackFilterIterator является встроенным классом PHP, который можно использовать начиная с PHP 5.4 и далее.
Этот пример взят из документации PHP для RecursiveDirectoryIterator класс. Спасибо Солнцу, который сделал это шесть лет go.
Надеюсь, это поможет. ;)