求助修改Bash脚本:仅按大小排序文件并显示大小(排除文件夹)
修正后的Bash脚本实现
核心问题是原脚本用du -a会包含目录,要只显示文件,我们可以用find命令筛选出所有普通文件,再结合du计算大小。修改后的完整脚本如下:
read -p "Enter the size of the top: " MARIMETOP find . -type f -exec du {} + | sort -n -r | head -n "$MARIMETOP" | /usr/bin/awk ' BEGIN{ pref[1]="K"; pref[2]="M"; pref[3]="G"; } { x = $1; y = 1; while( x > 1024 ) { x = (x + 1023)/1024; y++; } printf("%g%s\t%s\n", int(x*10)/10, pref[y], $2); }'
关键改动说明
- 替换
du -a为find . -type f -exec du {} +:-type f:只匹配普通文件,排除目录、符号链接等其他类型-exec du {} +:批量将找到的文件传给du计算单个文件的大小,效率比逐个处理高
- 移除了原脚本中未生效的
total相关冗余代码
内容的提问来源于stack exchange,提问作者Sergiu Neagoe
相关产品推荐
相关产品推荐

