簡體   English   中英

遞歸掃描目錄以查找具有特定擴展名的文件

[英]Scan directory for files with specific extensions recursively

我正在嘗試查找具有特定擴展名的文件夾和子文件夾中的所有文件。

 $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
}

我在哪里做錯了? 感謝幫助!

看起來PHP glob()函數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"
)));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM