我想列出目录中的所有文件并排除子目录(newfiles)
我试图使用(if($ file!=" newfiles")) 但没有改变的事情
foreach (ListFiles("/data") as $key=>$file){
if($file != "newfiles"){
$files=array_pop(explode('/',$file));
$lfile[]=$files;
}
}
function ListFiles($dir) {
if($dh = opendir($dir)) {
$files = Array();
$inner_files = Array();
while($file = readdir($dh)) {
if($file != "." && $file != ".." && $file[0] != '.') {
if(is_dir($dir . "/" . $file)) {
$inner_files = ListFiles($dir . "/" . $file);
if(is_array($inner_files)) $files = array_merge($files, $inner_files);
} else {
array_push($files, $dir . "/" . $file);
}
}
}
closedir($dh);
return $files;
}
}
答案 0 :(得分:1)
如果要列出所有文件,请使用此
`find /data -type f`
如果要列出所有文件并排除名为“newfiles”的目录,请使用此
`find /data/!(newfiles) -type f`
如果你想排除目录“badfiles”
`find /data/!(newfiles|badfiles) -type f`
如果你想要文件和目录
`find /data/!(newfiles)`
等待不要降级我。它当然是一个shell可执行文件, 在php中你可以像这样运行shell脚本:
$output = shell_exec('find /data/!(newfiles|badfiles) -type f');
print_r($output);
玩得开心
答案 1 :(得分:0)
您应该检查它是/data/newfiles
而不仅仅是/newfiles
,因为 $ file 变量会返回整个位置,而不仅仅是文件名。
我们检查$file
变量是否包含字符串data/newfiles
。如果匹配,则表示该文件位于子目录中。
我们只将它添加到$lfile
数组中,如果它不匹配,则表示不在newfiles
子目录中的文件。
foreach (ListFiles("/data") as $key=>$file){
/* Only continue if the $file variable doesn't have the string "data/newfiles" */
if(!preg_match("/data\/newfiles/", $file)){
$files=array_pop(explode('/', $file));
$lfile[]=$files;
}
}
/data
指向文件系统根目录中的data
文件夹。我认为你的意思是./data
。
答案 2 :(得分:-1)
您可以使用以下功能排除您想要的目录
function glob_deep($pattern, $exclude = array(), $flags = 0)
{
$files = glob($pattern, $flags);
foreach (glob(dirname($pattern).'/*', GLOB_ONLYDIR|GLOB_NOSORT) as $dir)
{
if(!in_array($dir, $exclude)) {
$files = array_merge($files, glob_recursive($dir.'/'.basename($pattern), $flags));
}
}
return $files;
}
并称之为
$files = glob_deep('data', array('newfiles'));
var_dump($files);
希望这会有所帮助