统计文件大小,以GB、MB、KB、B输出

本文介绍了如何使用filesize函数统计文件大小,并提供了两种实现方法。第一种方法使用循环和switch语句输出文件大小,第二种方法则通过一个简洁的函数实现相同功能。

  先记:学习了fread读取命令,用到了filesize函数,知道这个函数定大有用到的时候,遂用之编写统计文件大小函数……
 

  使用filesize()函数命令实现文件大小的统计,要求:1,以GB、MB、KB、B中的一个输出;2.数量级必须大于1小于1024,并保留两位小数;

  开始动工:

$len = filesize("1.rmvb");
$i=4;
while($i){
if(($out=$len/pow(1024,$i))>1.0||$i==1){
switch($i){
case 4: {printf("%.2f TB",$out);break;}
case 3: {printf("%.2f GB",$out);break;}
case 2: {printf("%.2f MB",$out);break;}
case 1: {printf("%.2f KB",$out);break;}
}
break;
}
$i--;
}

  演示效果

1.85GB
2.70GB

  得意间,上PHP官网的PHP教程上看,结果找到了一个更简单更有效的方法(So Peifu)

  代码如下:

 

function format_bytes($size) {
$units = array(' B', ' KB', ' MB', ' GB', ' TB');
for ($i = 0; $size >= 1024 && $i < 4; $i++) $size /= 1024;
return round($size, 2).$units[$i];
}

  演示效果:

1.85GB
2.7GB

  当然还有更多的做法,但这种方法是应该是最简单的,最快的了吧,相信你也有别的方法,期待你的分享

转载于:https://www.cnblogs.com/picaso/archive/2011/05/25/2056886.html

<think>好的,我现在需要帮助用户解决如何在命令行中以GB为单位显示当前目录下所有文件文件夹的大小的问题。根据用户提供的引用内容,我需要结合已有的信息,找到合适的方法。 首先,用户提到了使用du命令,引用[1]和[4]中都提到了du命令来查看文件夹大小。用户希望以GB为单位显示,可能需要用到-h参数,因为引用[1]提到-h可以以人类可读格式显示,比如GB。但需要确认是否直接支持GB单位,或者可能需要调整参数。 另外,引用[2]提到在Linux下使用du -sh *来查看当前目录下所有文件文件夹的大小,但默认可能以KBMB或自动选择合适的单位显示。用户想要强制使用GB,可能需要额外的参数。 查看du命令的手册,发现--block-size=G可以指定单位为GB,但可能数值会是整数,不够精确。而-h参数会自动选择单位,可能显示为G、M等。如果用户希望所有条目都用GB显示,即使小于1GB的也显示为小数,可能需要结合其他选项,比如--apparent-size或调整block的大小。 可能的命令是du -h --block-size=1G,但需要测试是否正确。或者使用du -sh * --block-size=GB。不过实际测试中,可能更常见的是使用-h,并让系统自动选择单位,但用户明确要求GB,可能需要处理。 另外,引用[3]提到在Windows下使用CMD或PowerShell的脚本,但用户的问题可能更偏向于Linux环境,因为引用了du命令。所以需要区分系统环境,但用户没有明确说明,可能需要给出两种系统的解决方案。 综合来看,对于Linux系统,使用du命令的-h参数可以自动以GBMB等显示,但若强制所有条目用GB,可能需要调整block size。例如,du -h --apparent-size --block-size=GB,不过需要验证是否可行。或者使用du -B GB,但可能不同系统版本参数不同。 此外,可能需要结合排序或其他参数来更清晰地显示。例如,du -sh * | sort -hr,但用户主要需求是显示为GB单位。 对于Windows系统,用户可能需要使用PowerShell的命令,例如Get-ChildItem | Select-Name, @{Name="Size(GB)";Expression={$_.Length / 1GB}},但需要确认语法是否正确。 总结可能的解决方案: Linux/MacOS: 使用du -h命令,自动以GB/MB显示,或者使用--block-size=1G来强制以GB为单位,但可能显示为整数。例如: du -h --block-size=1G /path/to/directory 或者更精确的,使用du --apparent-size -B GB,但需要确认参数是否可用。 另一种方法是使用du -sh *,然后通过管道传递给numfmt进行单位转换,例如: du -sb * | numfmt --to=si --suffix=B 但可能比较复杂。 对于Windows: 使用PowerShell命令: Get-ChildItem | Select-Object Name, @{Name="Size(GB)";Expression={"{0:N2}" -f ($_.Length / 1GB)}} 或者批处理脚本,如引用[3]中的方法,但调整单位为GB。 需要确保回答覆盖Linux和Windows的可能情况,并指出不同方法的优缺点,比如自动单位与强制单位之间的差异。同时,提醒用户注意不同系统下的命令差异,以及可能需要安装额外工具的情况。 可能还需要提到,对于小于1GB文件,使用GB单位可能显示为0,或者小数,需要根据命令的支持情况说明。例如,使用-h可能更合适,因为它会自动调整单位,而用户如果坚持用GB,可能需要接受小数形式。 最后,验证给出的命令是否正确,例如在Linux中,运行du -h --block-size=G可能会显示每个项目以G为单位,但实际测试可能发现该参数可能无效,正确的参数可能是--block-size=1G,或者使用-B G。 根据du的man page,-B或--block-size可以指定块的大小,例如du -B G,但输出可能不带小数点,而是整数。而结合-h参数可能无法同时使用,因为-h已经处理了单位。所以可能需要选择其中一种方式。 例如,使用du -B GB --apparent-size *,但需要测试。 可能的正确命令为: du -h --apparent-size --max-depth=1 但用户需要所有文件和子目录的大小,以GB显示。因此,最终的推荐命令可能是: 对于Linux/MacOS: du -sh * --block-size=1G 或者更精确的: du -sb * | awk '{printf "%.2f GB\t%s\n", $1/1024/1024/1024, $2}' 这样将字节转换为GB,并保留两位小数。 对于Windows PowerShell: Get-ChildItem | ForEach-Object { "{0:N2} GB`t{1}" -f ($_.Length / 1GB), $_.Name } 或者更简洁的: ls | select Name, @{Name="SizeGB";Expression={[math]::Round($_.Length / 1GB, 2)}} 这样可以得到每个文件文件夹的大小,以GB为单位,保留两位小数。但需要注意的是,对于文件夹,PowerShell可能需要递归计算其内容大小,类似du,而默认的Length属性可能不包含子文件夹内容,因此需要另外处理。例如: Get-ChildItem -Directory | Select-Object Name, @{Name="SizeGB";Expression={ (Get-ChildItem $_.FullName -Recurse | Measure-Object -Property Length -Sum).Sum / 1GB }} 但这可能会比较慢,特别是对于大目录。 因此,需要明确告诉用户,在Windows下可能需要编写更复杂的脚本,或者使用第三方工具,而在Linux下使用du命令更为直接。 综合以上分析,最终给用户的回答应包含针对Linux和Windows的不同方法,并指出可能的限制和注意事项。</think>在Linux/Unix系统和Windows系统中以GB为单位显示当前目录下所有文件文件夹的大小,可采用以下方法: ### Linux/MacOS系统 1. **基础命令**(自动适配最佳单位) ```bash du -sh * | sort -hr ``` - `-h`参数自动转换为GB/MB等易读单位 - `-s`仅显示总大小,`*`匹配当前目录所有内容 - `sort -hr`按人类可读数值降序排列 2. **强制以GB为单位**(显示小数精度) ```bash du -sb * | awk '{printf "%.2f GB\t%s\n", $1/1024/1024/1024, $2}' ``` - `-sb`精确统计字节大小 - `awk`计算并格式化为两位小数的GB单位 ### Windows系统 1. **PowerShell精确统计** ```powershell Get-ChildItem | Select-Object Name, @{Name="Size(GB)";Expression={[math]::Round(($_.Length / 1GB), 2)}} ``` - 直接计算文件大小并保留两位小数 - 注:文件夹需递归统计(下方补充方法) 2. **批处理脚本**(需管理员权限) 创建`.bat`文件并写入: ```bat @echo off for /d %%i in (*) do ( setlocal set "folder=%%i" for /f "tokens=3" %%j in ('dir /s /-c "%%i" ^| findstr "File(s)"') do ( set "size=%%j" set /a size_gb=!size:/1024/1024/1024=! echo !folder!: !size_gb! GB ) endlocal ) ``` - 遍历子文件夹并转换为GB单位 - 注意:脚本需调试以适应不同系统环境[^3] ### 注意事项 - **文件统计差异**:Linux的`du`默认统计磁盘占用块,Windows的`dir`统计实际文件大小[^2][^4] - **单位精度限制**:1GB=1073741824字节,小数精度可能因命令而异 - **性能影响**:递归统计大目录时耗时较长
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值