如何找到名称以点开头的文件和文件夹?

时间:2019-05-05 13:56:49

标签: php glob

我正在尝试编写脚本以递归地进入目录结构以查找*.sm*.ssc文件。但是,我的脚本会跳过名称以点开头的文件夹,例如.Folder Name。在Windows上-该文件夹未隐藏。

找到正确结果的示例:

/mydir/Directory Name/File Name.sm

找不到的文件示例:

/mydir/.Directory Name/.File Name.sm
function findFiles($directory) {
    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) {
    $directory = str_replace(['[',']',"\f[","\f]"], ["\f[","\f]",'[[]','[]]'], $directory);
    foreach(glob("{$directory}/*.{sm,ssc}", GLOB_BRACE) as $file) {
                $files[] = $file;
            }
    }

    return $files;
}

1 个答案:

答案 0 :(得分:2)

源代码中有一个comment

  

初始DOT必须从字面上进行匹配。

尽管Windows中没有隐藏以点开头的文件夹,但php仍将其视为特殊名称。

glob('.*');

这将返回以点开头的文件或文件夹。

因此完整列表可以

array_merge(glob('.*'), glob('*'));