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