统计目录下某类型文件的大小

find ./ -iname "*.wav" | xargs du -cb | grep "total"--总共大小

 

find ./ -iname "*.xml" | xargs du -cb | sort -rn ------按大小排序

 

转载于:https://www.cnblogs.com/hutudan/p/5549627.html

<think>好的,用户让我介绍一下如何在Linux中查看某个文件夹下特定类型文件的数量和大小,特别是以.apk为例,在app目录及其子目录统计。我需要先回忆一下常用的命令,然后分步骤解释清楚。 首先,统计文件数量的话,find命令应该是常用的。记得find可以递归查找子目录,所以可以结合-type f来指定文件类型,然后用-name进行通配符匹配。比如find app -type f -name "*.apk",这样会列出所有.apk文件。之后要统计数量的话,可以通过管道符传递给wc -l来计数。所以完整的命令应该是find app -type f -name "*.apk" | wc -l。这部分应该没问题,不过要注意路径是否正确,以及是否有权限问题。 接下来是统计这些文件大小总和。这时候可能需要用到du或者ls的组合命令。比如用find找到所有文件后,用-exec执行du -b来获取每个文件大小,然后通过awk累加起来。比如find app -type f -name "*.apk" -exec du -b {} \; | awk '{sum+=$1} END {print sum}'。不过这样得到的是字节数,用户可能更希望看到的是更友好的单位,比如MB或GB。这时候可以在后面加上转换,比如除以1024两次得到MB,或者用numfmt命令来格式化输出。 另外,也可以考虑用stat命令代替du,不过可能语法稍有不同。或者用find结合xargs和awk来处理,但可能会更复杂。对于用户来说,可能更简单的方式是使用find和du的组合,或者直接使用du命令的选项。 还有一种方法是使用ls命令,但ls在处理大量文件时可能会有参数过长的问题,所以还是find更可靠。另外,用户可能需要同时知道数量和总大小,这时候可以将两个命令结合起来,或者写成一个脚本。不过用户的问题可能只需要分开的两个命令即可,所以分步解释比较清晰。 需要注意的是,这些命令是否在app目录下执行,或者是否需要绝对路径。另外,权限方面如果用户没有读取某些子目录的权限,可能会导致统计不全,这时候可能需要sudo,但提醒用户谨慎使用权限提升。 总结一下,步骤应该是: 1. 使用find查找所有.apk文件并计数。 2. 使用find结合du或awk计算总大小,并转换单位。 另外,可能需要解释每个命令的部分,比如find的参数含义,-exec的作用,以及awk的累加方法。这样用户即使不太熟悉命令行,也能理解每一步的意义。同时提醒用户替换.apk为其他扩展名可以应用于其他文件类型。 可能的错误点包括:通配符是否需要引号包裹,比如-name "*.apk"必须用引号防止shell扩展。还有-exec后面需要使用\;或者+来结束,这里应该用\;因为每个文件执行一次du。如果用+的话,可能会将多个文件合并成一个参数,导致du的结果不准确,不过实际上du处理多个文件时会显示各自的大小,所以用+可能更高效,但需要测试确认。 另外,使用du -b会显示每个文件的字节大小,而如果文件系统有块大小的问题,可能需要用--apparent-size或者其他选项,但一般情况下-b应该足够准确。不过不同版本的du可能有不同的选项,需要确认兼容性。 最后,用户可能需要总大小的易读格式,比如用-h选项,但du的-h不能直接在管道中累加,所以需要用awk处理原始字节数,然后转换成MB或GB。例如,总字节数除以1024^2得到MB,保留两位小数。这时候可以在END部分用printf格式化输出。 例如: find app -type f -name "*.apk" -exec du -b {} \; | awk '{sum+=$1} END {printf "总大小: %.2f MB\n", sum/(1024*1024)}' 这样会更友好。同时,可以提到其他单位转换的方式,或者使用numfmt工具,例如: find ... | awk '{sum+=$1} END {print sum}' | numfmt --to=iec --suffix=B 这样会显示为类似 55M 这样的格式。不过numfmt可能不是所有系统都默认安装,需要用户确认。 另外,如果用户想同时获取数量和大小,可以将两个命令合并,或者使用一个find命令同时处理,但这样可能需要更复杂的脚本,可能超出初学者的需求。所以分开讲解可能更合适。 总结命令步骤: 数量统计: find app -type f -name "*.apk" | wc -l 大小统计(字节总和): find app -type f -name "*.apk" -exec du -b {} \; | awk '{sum+=$1} END {print sum}' 转换为MB: ... | awk '{sum+=$1} END {printf "%.2f MB\n", sum/1048576}' 或者使用numfmt: ... | awk '{sum+=$1} END {print sum}' | numfmt --to=iec --suffix=B 另外,可能需要检查是否存在任何错误,例如查找路径是否正确,通配符是否被正确引用,以及用户是否有权限访问所有子目录。如果存在权限问题,可能需要使用sudo,但提醒用户谨慎使用,并建议检查目录权限。 可能用户还希望看到每个文件大小,而不仅仅是总和,这时候可以省略awk部分,直接查看输出,但用户的需求是总和,所以应集中在总和的计算上。 另外,可以提到替代方法,例如使用locate命令,但locate数据库可能不是实时更新的,所以find更可靠。或者使用ls -lR结合grep,但处理起来可能不如find方便。 最后,给出完整的示例命令,并说明替换扩展名的方法,例如将.apk换成.txt等,以增加适用性。</think>### Linux统计指定类型文件数量及大小的分步指南 --- #### **一、统计`.apk`文件数量** 使用`find`命令查找文件,并通过管道符`|`连接`wc -l`统计行数(即文件数)。 **命令格式**: ```bash find app -type f -name "*.apk" | wc -l ``` **参数解释**: - `app`:目标目录名称。 - `-type f`:仅搜索普通文件。 - `-name "*.apk"`:匹配`.apk`后缀的文件。 - `wc -l`:统计行数(即文件数量)。 --- #### **二、统计`.apk`文件大小** 通过`find`查找文件后,使用`du`计算每个文件大小,再用`awk`累加总和。 ##### **1. 直接输出字节总数** **命令格式**: ```bash find app -type f -name "*.apk" -exec du -b {} \; | awk '{sum+=$1} END {print sum " 字节"}' ``` **参数解释**: - `-exec du -b {} \;`:对每个文件执行`du -b`,输出字节大小。 - `awk`:累加所有文件的字节数,最后输出总和。 ##### **2. 转换为易读单位(如MB/GB)** **方法一:使用`awk`计算** ```bash find app -type f -name "*.apk" -exec du -b {} \; | awk '{sum+=$1} END {printf "总大小: %.2f MB\n", sum/(1024*1024)}' ``` **方法二:使用`numfmt`格式化** ```bash find app -type f -name "*.apk" -exec du -b {} \; | awk '{sum+=$1} END {print sum}' | numfmt --to=iec --suffix=B ``` --- #### **三、扩展场景** 1. **统计其他文件类型** 替换命令中的`.apk`为其他扩展名(如`.txt`): ```bash find app -type f -name "*.txt" | wc -l ``` 2. **同时输出数量和大小** 将两个命令合并为脚本: ```bash echo "文件数量: $(find app -type f -name "*.apk" | wc -l)" echo "总大小: $(find app -type f -name "*.apk" -exec du -cb {} + | grep total | awk '{print $1}') 字节" ``` --- #### **四、注意事项** 1. **权限问题** 若目录包含受保护文件,需使用`sudo`提升权限: ```bash sudo find app -type f -name "*.apk" | wc -l ``` 2. **通配符引号** 确保`-name`后的通配符用双引号包裹(如`"*.apk"`),避免Shell错误解析。 3. **路径有效性** 若`app`目录不在当前路径下,需使用绝对路径(如`/home/user/app`)。 --- 通过以上步骤,可快速统计指定类型文件的数量及大小,适用于日志分析、存储清理等场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值