无法获取glob来查找所有不以〜开头的文件

时间:2016-01-12 02:25:15

标签: php arrays glob

我已经编写了以下函数来递归查找所有不以〜开头的文件。但它不起作用。实际上它似乎只能找到以〜

开头的那些
function rfl($dir) {
    $search=$dir."[^~]*";
    echo "searching for: $search<br/>";
    $search=glob($search);  //find every file and directory not starting with ~.  directories are returned with / afterwards
    $list=array();
    foreach ($search as $file) {
        if (is_dir($file)) {
            $list=array_merge($list,rfl($file.'/'));    //recursively search for valid files in directories
            echo 'D: ' . $file.'<br/>';
        } else {
            $list[]=$file;                          //add files to list
            echo 'F: ' . $file.'<br/>';
        }
    }
    return $list;
}
print_r(rfl('code/'));

返回

searching for: code/[^~]*
searching for: code/~private/[^~]*
D: code/~private
Array ( )

以下是使用克莱顿答案的固定函数:

function rfl($dir) {
    $search = preg_grep('!^'.$dir.'[^~]!', glob($dir.'*')); //find every file and directory not starting with ~.  directories are returned with / afterwards
    $list=array();
    foreach ($search as $file) {
        if (is_dir($file)) {
            $list=array_merge($list,rfl($file.'/'));    //recursively search for valid files in directories
        } else {
            $list[]=$file;                          //add files to list
        }
    }
    return $list;
}

2 个答案:

答案 0 :(得分:1)

[prevObject: m.fn.init[1], context: document, selector: "#target_element_id"] 似乎并没有真正允许否定,尽管其中一条评论说明了PHP的glob文档。

相反,我建议以下作为替代方案:

glob

preg_grep将过滤数组,仅允许不以波浪号开头的结果。由于glob返回一个完整路径,我们需要转义并在正则表达式模式中包含路径。

在此处阅读更多内容:translate()

  

preg_grep - 返回与模式匹配的数组条目

     

用法数组preg_grep(字符串$ pattern,数组$ input [,int $ flags = 0])

以下是您的代码已更新,其中包含更改:

$path = '../Sites/';
$results = preg_grep('!^'.preg_quote($path).'[^~]!', glob($path.'*'));
print_r($results);

答案 1 :(得分:0)

所有不以〜开头的文件:

$files = glob('./files/[!~]*.*');

jpg和png,不能以〜开头:

$files = glob('./files/[!~]*.{jpg,png}', GLOB_BRACE);

您将在此处找到详细的说明 https://cowburn.info/2010/04/30/glob-patterns/