以递归方式扫描具有特定扩展名的文件的目录

时间:2018-04-15 16:05:38

标签: php regex

我正在尝试查找具有特定扩展名的文件夹和子文件夹中的所有文件。

 $dir = new RecursiveDirectoryIterator($directory);
 $iter = new RecursiveIteratorIterator($dir);
 $files = new RegexIterator($iter, '/.*\.(src|in|out|rc)$/i', RecursiveRegexIterator::GET_MATCH);

我的输出应该如下var_dump()

  array(105) {
  [2]=>
  string(6) "00.out"
  [3]=>
  string(6) "00.src"
  [4]=>
  string(6) "01.out"...
}

实际结果

object(RegexIterator)#4 (1) {
  ["replacement"]=>
  NULL
}

我在哪里做错了? 谢谢你的帮助!

1 个答案:

答案 0 :(得分:2)

看起来PHP glob()函数可以执行您想要的操作:

  

glob()函数搜索匹配模式的所有路径名   根据libc glob()函数使用的规则,即   类似于常见shell使用的规则。

foreach (glob("*.txt") as $filename) {
    echo "$filename size " . filesize($filename) . "\n";
}

这是agd243的一个漂亮的函数,它使用glob()通过扩展名查找所有文件并将其作为数组返回:

function findFiles($directory, $extensions = array()) {
    function glob_recursive($directory, &$directories = array()) {
        foreach(glob($directory, GLOB_ONLYDIR | GLOB_NOSORT) as $folder) {
            $directories[] = $folder;
            glob_recursive("{$folder}/*", $directories);
        }
    }
    glob_recursive($directory, $directories);
    $files = array ();
    foreach($directories as $directory) {
        foreach($extensions as $extension) {
            foreach(glob("{$directory}/*.{$extension}") as $file) {
                $files[$extension][] = $file;
            }
        }
    }
    return $files;
}
var_dump(findFiles("C:\\baseFolder", array (

    "src",
    "in",
    "out",
    "rc"
)));