Bash脚本如何列出按大小排序的文件且不显示文件夹大小
解决方案
你当前使用的du命令默认会同时输出目录和文件的容量统计结果,要仅筛选文件、提取指定目录及其子目录下体积最大的前10个文件,可参考以下实现:
推荐写法(兼容特殊文件名,稳定性高)
通过find先精准过滤出所有普通文件,再做容量统计排序,不会混入目录、软链接等非文件条目,完全适配脚本使用场景:
# 脚本中使用时,将目标目录替换为传入的参数即可,例如$1 sudo find <目标目录路径> -type f -exec du -h {} + | sort -hr | head -n 10
参数说明:
-type f:仅匹配普通文件,从根源上排除目录项-exec du -h {} +:批量将找到的文件传入du计算人类可读格式的容量,执行效率远高于逐个文件调用sort -hr:按容量从大到小逆序排序,支持识别K/M/G等易读容量单位head -n 10:截取排序后的前10条结果
基于原命令的改法
如果要保留你原命令中-S(统计目录容量时不包含子目录占用)的逻辑,可以在原命令后增加文件类型判断,过滤掉目录条目:
sudo du -haS ../../src/ | while read size path; do [ -f "$path" ] && echo "$size $path"; done | sort -hr | head -n 10
注意:该写法对包含换行符的特殊文件名兼容性较差,仅适合临时使用,正式脚本优先选择上面的find实现。
高精度排序优化版
如果需要避免sort -h的单位识别误差、输出格式更整齐,可以先按字节数做纯数字排序,最后再转换为易读格式:
sudo find <目标目录路径> -type f -printf "%s %p\n" | sort -nr | head -n 10 | numfmt --to=iec --suffix=B --padding=7
内容的提问来源于stack exchange,提问作者Andrey Romashev
相关产品推荐
相关产品推荐

