如何统计目录中的大量文件

How to count a large number of files in a directory

我正在尝试使用 Laravel 的存储 class.

一次生成并计算大量小 json 文件(比如数百万个)

我试过 count(Storage::files(PATH)) 但由于有数百万个,所以没用。

首先它返回执行时间超过 30 秒的错误,所以我尝试提高 max_execution_time 但现在在 运行 一段时间后它 returns 一个空白页没有线索出了什么问题

我希望有某种聪明的方法来有效地计算所有文件 也许像大块一样(我不认为存储具有这种功能) 或任何可能有助于阻止其崩溃的流程优化

有什么帮助吗?

我会用 PHPexec 来做到这一点——你的 OS 已经知道目录中的文件数..它索引了它,所以为什么不使用它?超级快速和干净。

<?php

exec('ls -l /path/to/your/json/files | grep ^- | wc -l', $out);
echo $out[0];

注意这个execreturns是一个数组——所以你需要在$out[=17上使用索引0 =]

UPDATE -- 我测试使用以下创建 3,000,000 个文件 -- 结果 php exec 函数 运行 < 20秒。

#!/bin/bash
max=3000000
for i in `seq 2 $max`
do
    echo "$i" > $i.json
    echo "$i"
done

即使您将 max_execution_time 增加到 1 小时,它肯定会在 10 分钟左右的任何时候超时,这就是您得到空白页的原因。

@Zak 的解决方案是您最好的选择。