Php 使用glob获取所有文件、所有子文件夹和所有隐藏文件
在我的Recrive函数中,我有一段代码来压缩整个文件夹 全局($path.'/*')) 提供与我的$path匹配的所有文件和子文件夹 我用glob读到的,我甚至可以用glob获得隐藏文件“.filename” 全局('{,.}*',全局大括号) 如何在一个表达式中合并我的需要? 我试过了 全局(“{/,.}*”,全局大括号) 但只给我文件 我试过了 全局(“{/,,}*”,全局大括号) 但我得到了疯狂的结果 我已经过滤了。和 如何合并Php 使用glob获取所有文件、所有子文件夹和所有隐藏文件,php,glob,Php,Glob,在我的Recrive函数中,我有一段代码来压缩整个文件夹 全局($path.'/*')) 提供与我的$path匹配的所有文件和子文件夹 我用glob读到的,我甚至可以用glob获得隐藏文件“.filename” 全局('{,.}*',全局大括号) 如何在一个表达式中合并我的需要? 我试过了 全局(“{/,.}*”,全局大括号) 但只给我文件 我试过了 全局(“{/,,}*”,全局大括号) 但我得到了疯狂的结果 我已经过滤了。和 如何合并 glob($dir . '/*') 及 glob()方
glob($dir . '/*')
及
glob()
方法返回一个数组。所以如果你想合并两个不同的glob
结果
$merged = array_merge(glob($dir . '/*'), glob('{,.}*', GLOB_BRACE));
你试过这个吗
glob($path. '/{,.}*', GLOB_BRACE);
要获取所有文件夹/文件(即使是隐藏的文件夹/文件):
这将阻止在结果中列出“.”或“.”。可能您已经找到了解决方案,但如果您正在寻找一种方法,以递归方式为您提供文件和目录,并处理隐藏文件,我得到的是:
function rglob($pattern, $flags = 0) {
$files = glob($pattern, $flags);
foreach (glob(dirname($pattern).'/*', GLOB_ONLYDIR|GLOB_NOSORT) as $dir) {
$files = array_merge($files, $this->rglob($dir.'/'.basename($pattern), $flags));
}
return $files;
}
我在这里回答的情况下,其他人正在寻找,因为这似乎在谷歌高 解决方案1-仅限glob 这使用了一个专门为跳过“.”和“..”特殊目录而定制的glob。它与以下内容匹配:
- 不是用“.”隐藏的
- 用“.”隐藏,但后跟非“.”字符
- 以“..”开头,但后面至少有一个字符
在我的系统上,它们似乎在几乎完全相同的时间执行解决方案1需要的代码更少,但解决方案2更容易包含更多可忽略的术语。这将返回隐藏的文件和文件夹,但不返回
或。
:
glob('{,.}*[!.]*', GLOB_MARK | GLOB_BRACE);
示例结果:
file
file.
file.ext
folder/
...hiddenfile
...hiddenfile.ext
..hiddenfolder/
.h
.hiddenfile
.hiddenfolder/
附加信息Houman试图使用
[!,!…]
以
或为目标,但由于这是一个字符类,因此无法以定义长度的字符串为目标。这意味着[!.]
和[!…]
是相同的,并且目标字符串不包含无限数量的点(,,,,,,,,,,,,,,,,,,,,,,等等)。因此,我只使用了[!]
。只有使用像{jpg,png}
这样的大括号才能定位字符串。你找到一个新的
尽管我使用了标志向文件夹中添加了一个结束斜杠。这找不到合法的文件名…filename.ext
两年后-我使用了这个glob
-唯一的解决方案,它是这里唯一正确的解决方案。这找不到名为文件名的文件。
-以点结尾。@rexkogitans,/{,.}*[!]*
$globbed = glob("{*,.[!.]*,..?*}", GLOB_BRACE);
var_dump($globbed);
function globignore(array $ignore, $glob, $glob_flags = 0)
{
$globbed = glob($glob, $glob_flags);
return array_filter($globbed, function ($f) use ($ignore)
{
$base = basename($f);
foreach($ignore as $i)
{
if ($i == $base) return false;
}
return true;
});
}
$globbed = globignore(['.','..'], "{*,.*}", GLOB_BRACE);
var_dump($globbed);
glob('{,.}*[!.]*', GLOB_MARK | GLOB_BRACE);
file
file.
file.ext
folder/
...hiddenfile
...hiddenfile.ext
..hiddenfolder/
.h
.hiddenfile
.hiddenfolder/