如何修改sort命令参数,使kB级文件排序优先级高于字节级文件?
解决人性化文件大小排序异常问题
当前使用命令 tree -sifh . | sort -k2 -rh 对文件/目录按人性化大小排序时,出现排序不符合实际的问题:字节数值的文件(如 [1004])被排在KB级文件(如 [1.0K])之后,但实际1004字节小于1KB,导致排序逻辑错误。
问题根源
sort 默认按字符串字典序排序,[1004] 的字符串字符顺序比 [1.0K] 更靠后,因此被排在前面,但实际文件大小是1004B < 1024B(1KB),需要按实际字节大小而非字符串排序。
修改后的命令方案
通过将人性化大小转换为字节数再排序,即可实现正确的大小降序排列:
tree -sifh . | grep -v "^[0-9]* directories" | awk ' function to_bytes(size) { if (size ~ /K$/) return substr(size, 1, length(size)-1) * 1024 else if (size ~ /M$/) return substr(size, 1, length(size)-1) * 1024^2 else if (size ~ /G$/) return substr(size, 1, length(size)-1) * 1024^3 else return size } { bytes = to_bytes(substr($1, 2, length($1)-2)) print bytes, $0 } ' | sort -k1 -rh | cut -d' ' -f2-
命令解释
grep -v "^[0-9]* directories":过滤掉输出末尾的目录/文件统计行,避免干扰排序awk自定义函数to_bytes:将[3.4K]、[1004]这类人性化大小转换为纯字节数print bytes, $0:在每行前追加转换后的字节数,作为排序依据sort -k1 -rh:按字节数字段降序排序cut -d' ' -f2-:移除前面追加的字节数字段,还原原始输出格式
执行该命令后,KB级文件会按实际大小排在字节级文件之前,符合真实的大小排序逻辑。
内容的提问来源于stack exchange,提问作者hassanfaraji
相关产品推荐
相关产品推荐

