本篇文章给大家带来的内容是关于php如何使用递归来计算一个目录中所有文件的大小 (代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。sudo find /private/etc -exec ls -l {} \; | awk 'BEGIN {sum=0} {sum+=$5;} END {print sum}' # 4947228

ls -ld /etc #/etc -> private/etc

先计算出/etc目录所有文件的大小4947228

DirUtil.php<?php

/**

* Created by PhpStorm.

* User: Mch

* Date: 8/14/18

* Time: 22:11

*/

class DirUtil {

public static function getSize(string $path) {

$totalSize = 0;

$path = realpath($path);

if (!file_exists($path)) {

return $totalSize;

}

if (!is_dir($path)) {

return filesize($path);

}

if ($dh = opendir($path)) {

while (($file = readdir($dh)) !== false) {

if ($file !== "." && $file !== "..") {

$abs = $path.DIRECTORY_SEPARATOR.$file;

if (is_dir($file)) {

$totalSize += self::getSize($abs);

} else {

$totalSize += filesize($abs);

}

}

}

closedir($dh);

}

return $totalSize;

}

public static function entryForEach(string $path, callable $callback, mixed $data = null) {

$path = realpath($path);

if (!file_exists($path)) {

return 0;

}

if (!is_dir($path)) {

return call_user_func($callback, $path, $data);

}

if ($dh = opendir($path)) {

while (($file = readdir($dh)) !== false) {

if ($file !== "." && $file !== "..") {

$abs = $path.DIRECTORY_SEPARATOR.$file;

if (is_dir($file)) {

self::entryForEach($abs, $callback, $data);

} else {

call_user_func($callback, $abs, $data);

}

}

}

closedir($dh);

}

return 0;

}

public static function entryReduce(string $path, callable $callback, $init) {

$acc = $init;

$path= realpath($path);

if (!file_exists($path)) {

return $acc;

}

if (!is_dir($path)) {

return call_user_func($callback, $acc, $path);

}

if ($dh = opendir($path)) {

while (($file = readdir($dh)) !== false) {

if ($file !== "." && $file !== "..") {

$abs = $path.DIRECTORY_SEPARATOR.$file;

if (is_dir($file)) {

$acc = self::entryReduce($abs, $callback, $acc);

} else {

$acc= call_user_func($callback, $acc, $abs);

}

}

}

closedir($dh);

}

return $acc;

}

}

test:// php ./DirUtil.php /etc

if ($argc < 2) {

printf("Usage: php %s [filename]\n", __FILE__);

exit(1);

}

echo DirUtil::getSize($argv[1]).PHP_EOL; // 899768

$dir_get_size = function($path) {

$size = 0;

DirUtil::entryForEach($path, function($path) use (&$size) {

$size += filesize($path);

});

return $size;

};

echo $dir_get_size($argv[1]).PHP_EOL; // 899768

echo DirUtil::entryReduce($argv[1], function($sum, $path) {

$sum += filesize($path);

return $sum;

}, 0).PHP_EOL; // 899768

相关推荐:

php递归示例 php递归函数代码

PHP递归创建多级目录,php递归

php递归json类实例,php递归json_PHP教程

用递归求最大值PHP,php如何使用递归来计算一个目录中所有文件的大小(代码)...相关推荐

  1. java实现递归下降分析_使用递归实现检查未知层级目录中的文件-Java实用技能

    现在有这样一个需求,给你一个目录,需要你在此目录中查找全部名字中包含指定字符的文件. 这题的主要难点在于:目录中可能包含子目录,子目录中又会包含子目录.而我们事先没办法确定子目录到底有多少层!这时候就 ...

  2. Java 目录操作一(递归创建目录、删除目录、判断目录是否为空、判断文件是否隐藏、获取目录大小、在指定目录中查找文件)

    递归创建目录 import java.io.File;public class Main {public static void main(String[] args) {String directo ...

  3. c语言递归求塔移动次数,c语言递归调用汉诺塔

    递归算法的出发点不是由初始条件出发,而是把出发点放在求解的目标上,从所求的未知项出发逐次调用本身的求解过程,直到递归的边界(即初始条件). 汉诺塔问题的重点是分析移动的规则,找到规律和边界条件. 若需 ...

  4. c 语言 求文件大小,C程序中如何读取目录中的文件并判断文件大小等信息

    读取目录内容 应用程序可以用readdir系列函数来读取目录内容. #include #include DIR *opendir(const char *name); //成功返回目录指针,失败返回N ...

  5. C语言以递归求斐波那契数列(附完整源码)

    递归求斐波那契数列 递归求斐波那契数列完整源码(定义,实现,main函数测试) 递归求斐波那契数列完整源码(定义,实现,main函数测试) #include <locale.h> #inc ...

  6. 递归算法遍历文件夹中所有文件递归删除文件夹

    - 引言:怎样才能遍历出一个文件夹中的所有文件呢,我们知道,java中的File类中有这样的方法,list() ,可以返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录.我们是否可 ...

  7. 递归求嵌套数组中最大值

    今早在 https://attachments.me/hirehack/public/computer.html 做题,有一题是 递归求嵌套数组中最大值: /* This challenge requ ...

  8. 初识递归,使用递归方法求一个数组中的最大值

    找一个数组的最大值,方法很多,也很简单,一般再定义一个变量就可以了,就像下面这串代码. int []arr=new int [] {1,22,3,44,5,6,76,118,91};int max=a ...

  9. C语言递归求四个数的最大值:Max函数的递归

    递归算法求四个数的最大值 问题描述:通过函数的递归求四个数的最大值 解题思路:通过多次比较两个数进行比较大小,本质就是冒泡法排序 即: max_4=max_2(num1,max_2(num2,max_ ...

最新文章

  1. VS下调用Matlab引擎
  2. C++网络包截取开发
  3. 读书笔记《单核工作法》_6:颠倒you'xian'ji
  4. 二叉树的层序遍历—leetcode102
  5. 腾讯TencentOS 十年云原生的迭代演进之路
  6. nmcli 命令的基本使用
  7. 用Jenkins自动化搭建测试环境_jenkins基础搭建_入门试炼02
  8. 有趣的应用 | 使用RNN预测股票价格系列一
  9. 自己制作精美的App Store 软件截屏
  10. [转]Insert, Update, and Delete Destination table with SSIS
  11. shell 循环控制语句
  12. Eclipse 工程迁移到 Android Studio
  13. OSChina 周五乱弹 —— 源花?真土鳖,我要开源小仙女!
  14. 如何用python批量识别图片上的文字(二)
  15. Java 中的泛型是什么,它有什么作用?(十五)
  16. 江敏:数据中台驱动下的企业创新升级
  17. 【dart】private 小坑
  18. 文本输入框<input>
  19. 大中型电子计算机房装修材料价格,大型计算机机房装修方案以及材料清单.doc...
  20. intel的Linux移动硬盘换AMD,Linux之父换电脑:从Intel改为AMD 32核锐龙 CES:Intel展示“马蹄弯”折叠屏概念笔记本-宝商在线...

热门文章

  1. 计算机网络基础知识第二章要点
  2. 我的log4j与logback简易配置
  3. 【转】浅析动态代理类实现过程
  4. Mysql数据库常用指令
  5. 寄存器、存储器、内存的区别
  6. [C#] Direct2D 学习笔记 (一)vb.net转换为c#
  7. swift5导航栏标题文字属性设置
  8. 高通fastboot一键进9008工具_红米K30S至尊纪念版一键解锁bl获取面具root超详细刷机教程...
  9. 解决vue中路由跳转同一个路径报错
  10. python2异步编程_Python 异步编程入门