【问题标题】:How can I find files and folders whose names start with a dot?如何查找名称以点开头的文件和文件夹?
【发布时间】:2019-05-05 13:56:48
【问题描述】:

我正在尝试编写一个脚本以递归地进入目录结构以查找*.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;
}

【问题讨论】:

  • 能否请您澄清一下 - 标题为 files and folders whose names start with a dot 但问题表明您还希望查找具有 smssc 文件扩展名的文件。两者都是你想要完成的吗?

标签: php glob


【解决方案1】:

源码中有comment

首字母 DOT 必须按字面意思匹配。

所以虽然一个以点开头的文件夹在windows中没有隐藏,但是php仍然把它当作一个特殊的名字。

glob('.*');

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

所以一个完整的列表可以是

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-25
    • 2022-06-12
    • 2010-12-27
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 2016-08-22
    • 1970-01-01
    相关资源
    最近更新 更多