php - 如何查找名称以点开头的文件和文件夹?

标签 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;
}

最佳答案

有一个comment在源代码中:

Initial DOT must be matched literally.

因此,虽然以点开头的文件夹在 Windows 中并没有隐藏,但 php 仍然将其视为特殊名称。

glob('.*');

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

完整列表可以是

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

关于php - 如何查找名称以点开头的文件和文件夹?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55992705/

相关文章:

php - 如何定义 SoapVar 命名空间?

node.js - Nodejs glob 多种模式

perl - Perl 中的 glob() 函数用于获取文件名

php - 列出多维数组

php - 结帐时 Woocommerce 内部服务器错误

yaml - 使用单个 glob 模式包含多个没有已知根文件夹的子文件夹

regex - 在 Bash 扩展模式中转义 @(..)

javascript - 我想在 nodejs 的多个文件名中重命名特定字符串

php - 使用 Ajax 和 3 个连续的可靠下拉列表

PHP 到 MYSQL,问题