什么是获取所有子目录的列表以及php中给定目录下所有文件的另一个列表的最佳方法。 我可以使用非纯PHP代码,只要我可以从php使用它(例如ac / java / python / ...程序)。 比纯recursion快的东西,某种语言内置的东西(因为这些东西往往很快。)

===============>>#1 票数:4

看看RecursiveDirectoryIterator

foreach (new RecursiveDirectoryIterator('yourDir') as $file) {
    // you don't want the . and .. dirs, do you?
    if ($file->isDot()) {
        continue;
    }

    if ($file->isDir()) {
        // dir
    } else {
        // file
    }
}

===============>>#2 票数:2 已采纳

而且,如果您不喜欢OOing事情,则可以通过查找结果运行opendir()循环。

if (exec('find /startdir -type d -print', $outputarray)) {
  foreach ($outputarray as $onepath) {
    // do stuff in $onepath
  }
}

您确实指定了“非纯PHP”作为选项,对吗? :-)

===============>>#3 票数:1

取自php.netglob()文档:

$path[] = 'starting_place/*';

while(count($path) != 0) {
  $v = array_shift($path);

  foreach(glob($v) as $item) {
    if(is_dir($item))
      $path[] = $item . '/*';
    else if (is_file($item)) {
      //do something
    }
  }
}

===============>>#4 票数:1

class Dir_helper{
    public function __construct(){

    }
    public function getWebdirAsArray($rootPath){
        $l1 = scandir($rootPath);
        foreach ($this->getFileList($rootPath) as $r1){
        if ($r1['type'] == 'dir'){
            if (preg_match("/\./", $r1['name'])){
            $toplevel[] =  $r1['name'];
            } else {
            if (preg_match("/\d/",$r1['name'])){
                $seclevel[] = $this->getFileList($r1['name']);
            }
            }
        }
        }
        foreach ($seclevel as $sl){
        foreach ($sl as $cur){
            $sub[] = $cur['name'];
        }
        }
        return $result = array_merge((array)$toplevel, (array)$sub);
    }

    public function getFileList($dir){
        $retval = array();
        if(substr($dir, -1) != "/") $dir .= "/";
        $d = @dir($dir) or die("getFileList: Failed opening directory $dir for reading");
        while(false !== ($entry = $d->read())) {
            if($entry[0] == ".") continue;
            if(is_dir("$dir$entry")) {
                $retval[] = array(
                "name" => "$dir$entry/",
                "type" => filetype("$dir$entry"),
                "size" => 0,
                "lastmod" => filemtime("$dir$entry")
                );
            } elseif(is_readable("$dir$entry")) {
                $retval[] = array(
                "name" => "$dir$entry",
                "type" => mime_content_type("$dir$entry"),
                "size" => filesize("$dir$entry"),
                "lastmod" => filemtime("$dir$entry")
                );
            }
        }
        $d->close();
        return $retval;
    }

}

===============>>#5 票数:0

由于您不希望递归,因此我只写了一些额外的内容

// $dirs = [];
// Get All Files & Folders in $dir
$files = glob("$dir/*");
for ($i=0; $i < count($files); $i++) { 
    if (is_dir($files[$i])) {
        $files = array_merge($files, glob("$files[$i]/*"));
    //  $dirs[] = $files[$i]; // This can add the folder to a dir array
    }
}
// Remove folders from the list if you like
foreach ($files as $key => $file) {
    if (is_dir($file)) {
        unset($files[$key]);
    }
}
// Clean up the key numbers if you removed files or folders
$files = array_values($files);

===============>>#6 票数:0

使用php的内置RecursiveDirectoryIterator

编辑

就像是:

$dirs  = array();
$files = array();

$dir = __DIR__ . '/foo';

$iterator = new RecursiveDirectoryIterator(new DirectoryIterator($dir));

foreach ($iterator as $dirElement) {
    if ($dirElement->isDir()) {
        $dirs[] $dirElement->getPathname();
    }
    if ($dirElement->isFile()) {
        $files[] = $dirElement->getPathname();
    }
}

  ask by prongs translate from so

未解决问题?本站智能推荐:

5回复

ls在目录中的文件列表

我有一个C代码库,所有代码都位于同一目录中。 我想查找具有相同名称的代码文件的所有头文件。 现在,我有以下命令: 这将返回我要搜索的文件名的“列表”。 如何将此列表传递给另一个命令,以便可以看到哪些头文件的代码文件具有相同的名称?
4回复

我只需要在文本文件中获取包含其他目录中文件名的那些行

我有一个名为“ my_text_file.txt”的文本文件。 我有另一个名为“ dir”的目录。 现在,“ my_text_file.txt”有几行,并且每行都有一个文件名。 我只想获取“ my_text_file.txt”的行,这些行的文件名也存在于目录“ dir”中。 我尝
2回复

如何从列表中选择一个文件,该列表按字母顺序说出文件“ x”

我对linux脚本编制不是很熟悉...并且不得不做一些奇怪的事情。 我有一个简单的目录,其中包含许多YYYYMMDD格式的文件夹...这是我在目录上执行ls时的外观 [admin @ xxx审核] $ ls 1145 20140827 20140828 20140829 201
2回复

如何在Bash中使用ls命令仅显示目录中的隐藏文件

我试图仅使用ls命令显示目录中的隐藏文件,除了. 和.. 但是命令返回. 和..目录名也在输出中。 即使我在ls中提到了“ A”选项,此命令也有什么问题。
1回复

如何获取文件名,文件大小,修改日期并存储它

我需要获取确切的文件路径,文件大小和修改日期,并将其存储在mysql表中。 如果我执行ls命令,它会给我输出很难正确解析的输出,以便将其加载到mysql表中。 修改文件路径,大小和日期并将其存储在mysql表中的最佳方法是什么(当前,我正在使用load data infile )。
1回复

使用带有选项和文件夹的“ ls”并获取完整路径

我正在使用ls myfolder 并且我已经看到ls -lrt -d -1 $PWD/*列出了具有完整路径的文件 问题是如何列出文件夹中具有完整路径的文件? (不使用cd进入该文件夹)
13回复

在Linux CLI中以递归方式列出文件,其中包含相对于当前目录的路径

这与此问题类似,但我想在unix中包含相对于当前目录的路径。 如果我执行以下操作: 它不包括完整路径。 例如,我有以下目录结构: 上面的代码将返回: 如何使用标准Unix命令将其包含在相对于当前目录的路径中?
10回复

目录中的最大索引节点数? [关闭]

关闭。 这个问题是题外话 。 它当前不接受答案。 想改善这个问题吗? 更新问题
3回复

使用grep列出目录中的条目

我正在尝试列出名称中只包含大写字母的目录中的所有条目。 目录需要附加“/”。 由于grep默认只查找大写字母(右?),我只是递归搜索testfiles下的目录,查找只包含大写字母的所有名称。 不幸的是,这不起作用。 至于附加目录,我不知道为什么我需要这样做。 有谁知道我可
2回复

如何使用find命令获取csv

我使用以下命令: 我csv它写成一个csv文件。 有没有办法以逗号分隔输出,所以我可以将它写入文本文件,例如: