【问题标题】:How to count a large number of files in a directory如何统计目录中的大量文件
【发布时间】:2019-09-12 03:15:22
【问题描述】:

我正在尝试使用 Laravel 的 Storage 类一次生成和计算大量的小 json 文件(比如数百万个)。

我尝试了count(Storage::files(PATH)),但由于有数百万个这样的事实,这并没有奏效。

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

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

请帮忙?

【问题讨论】:

  • 为什么不在数据库中存储一个文件计数器,并在文件生成期间递增?
  • @levi 文件的数量会发生很大变化,我需要为文件保留一个“实时”计数方法,这样每当它们改变时,计数器就会相应地增加或减少

标签: laravel apache php-7


【解决方案1】:

我会用PHPexec 来做这件事——你的操作系统已经知道目录中的文件数量.. 它索引它,为什么不使用它呢?超级快速和干净。

<?php

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

注意这个exec返回一个数组——所以你需要在$out上使用0的索引

更新 -- 我使用以下测试创建 3,000,000 个文件 -- 生成的 php exec 函数在

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

【讨论】:

  • 谢谢!这正是我正在寻找的方法问题是如何使其递归地计算子文件夹中的文件?
  • 我使用了 -R 标志,它成功了!谢谢你,你是一个救生员
  • 很高兴能帮上忙!
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-05
    • 2014-05-16
    • 1970-01-01
    • 2020-01-04
    • 1970-01-01
    • 2012-02-25
    • 2014-09-16
    相关资源
    最近更新 更多