热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

php递归计算一个目录中所有文件的大小

sudofindprivateetc-execls-l{}\;|awkBEGIN{sum0}{sum$5;}END{printsum}#4947228ls-ldetc#etc-

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

/*** 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 &#61; function($path) {$size &#61; 0;DirUtil::entryForEach($path, function($path) use (&$size) {$size &#43;&#61; filesize($path);});return $size;
};
echo $dir_get_size($argv[1]).PHP_EOL; // 899768echo DirUtil::entryReduce($argv[1], function($sum, $path) {$sum &#43;&#61; filesize($path);return $sum;
}, 0).PHP_EOL; // 899768

 


推荐阅读
  • 2018-2019学年第六周《Java数据结构与算法》学习总结
    本文总结了2018-2019学年第六周在《Java数据结构与算法》课程中的学习内容,重点介绍了非线性数据结构——树的相关知识及其应用。 ... [详细]
  • 本文介绍如何使用MFC和ADO技术调用SQL Server中的存储过程,以查询指定小区在特定时间段内的通话统计数据。通过用户界面选择小区ID、开始时间和结束时间,系统将计算并展示小时级的通话量、拥塞率及半速率通话比例。 ... [详细]
  • 本文探讨了如何在Classic ASP中实现与PHP的hash_hmac('SHA256', $message, pack('H*', $secret))函数等效的哈希生成方法。通过分析不同实现方式及其产生的差异,提供了一种使用Microsoft .NET Framework的解决方案。 ... [详细]
  • 丽江客栈选择问题
    本文介绍了一道经典的算法题,题目涉及在丽江河边的n家特色客栈中选择住宿方案。两位游客希望住在色调相同的两家客栈,并在晚上选择一家最低消费不超过p元的咖啡店小聚。我们将详细探讨如何计算满足条件的住宿方案总数。 ... [详细]
  • 深入解析Java枚举及其高级特性
    本文详细介绍了Java枚举的概念、语法、使用规则和应用场景,并探讨了其在实际编程中的高级应用。所有相关内容已收录于GitHub仓库[JavaLearningmanual](https://github.com/Ziphtracks/JavaLearningmanual),欢迎Star并持续关注。 ... [详细]
  • 本文详细介绍了如何使用 PHP 接收并处理微信支付的回调结果,确保支付通知能够被正确接收和响应。 ... [详细]
  • 由二叉树到贪心算法
    二叉树很重要树是数据结构中的重中之重,尤其以各类二叉树为学习的难点。单就面试而言,在 ... [详细]
  • Java多线程实现:从1到100分段求和并汇总结果
    本文介绍如何使用Java编写一个程序,通过10个线程分别计算不同区间的和,并最终汇总所有线程的结果。每个线程负责计算一段连续的整数之和,最后将所有线程的结果相加。 ... [详细]
  • 本题要求在一组数中反复取出两个数相加,并将结果放回数组中,最终求出最小的总加法代价。这是一个经典的哈夫曼编码问题,利用贪心算法可以有效地解决。 ... [详细]
  • LeetCode 690:计算员工的重要性评分
    在解决LeetCode第690题时,我记录了详细的解题思路和方法。该问题要求根据员工的ID计算其重要性评分,包括直接和间接下属的重要性。本文将深入探讨如何使用哈希表(Map)来高效地实现这一目标。 ... [详细]
  • 探讨 HDU 1536 题目,即 S-Nim 游戏的博弈策略。通过 SG 函数分析游戏胜负的关键,并介绍如何编程实现解决方案。 ... [详细]
  • 本文介绍两道有趣的编程问题:一是寻找给定数字n的连续数字序列及其个数,二是模拟一个翻杯子的游戏。同时附带一道智商题供读者思考。 ... [详细]
  • 本文介绍了如何在 C# 和 XNA 框架中实现一个自定义的 3x3 矩阵类(MMatrix33),旨在深入理解矩阵运算及其应用场景。该类参考了 AS3 Starling 和其他相关资源,以确保算法的准确性和高效性。 ... [详细]
  • JavaScript中的数组是数据集合的核心结构之一,内置了多种实用的方法。掌握这些方法不仅能提高开发效率,还能显著提升代码的质量和可读性。本文将详细介绍数组的创建方式及常见操作方法。 ... [详细]
  • 本文探讨了符号三角形问题,该问题涉及由相同数量的“+”和“-”符号组成的三角形。通过递归回溯法,可以有效地搜索并计算符合条件的符号三角形的数量。 ... [详细]
author-avatar
倪思慧1888
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有