如何让find命令输出类似ls -lrth的人类可读文件大小
递归获取目录下最大10个文件并输出人类可读大小的实现方法
重要提醒:不要直接对带K/M/G单位的大小字符串做普通排序,必须先以字节数值为依据完成排序后再转换格式,否则会出现单位混淆导致的排序错误。
你当前使用的字节排序命令逻辑是正确的,只需要补充格式转换步骤,就能输出类似ls -lrth的易读大小效果,以下是两种稳定可直接用的实现:
方案1:兼容绝大多数Linux环境的通用写法
借助numfmt工具完成字节到人类可读单位的转换,排序逻辑和原命令完全一致,不会出现大小排序错误,对特殊文件名的兼容性更好:
sudo find 11 -type f -printf "%s\t%p\n" | sort -n | tail -10 | numfmt --to=iec --field=1 --padding=6
核心参数说明:
--to=iec:以1024为换算单位转换为K/M/G/T等单位,和ls -h的换算规则完全一致--field=1:指定只转换每行第一列的字节数值,不影响后面的文件路径--padding=6:给大小列预留固定宽度,输出时列对齐更整齐易读
如果需要完全和ls -lrth的输出格式(包含权限、属主、修改时间等字段)一致,可以用以下写法:
sudo find 11 -type f -printf "%s\t%p\n" | sort -n | tail -10 | cut -f2- | xargs ls -lrth
提示:该写法在文件名包含换行符、连续特殊空格时可能出现解析异常,常规业务场景下使用没有问题。
方案2:新版系统简化写法
如果你的服务器是较新的Linux发行版(比如CentOS 8+、Ubuntu 20.04+),sort工具原生支持人类可读数值排序,可以直接用更简短的命令实现:
sudo find 11 -type f -exec ls -lh {} \; | sort -k5 -hr | head -10
核心参数说明:
-k5:指定按ls输出的第5列(文件大小列)作为排序依据-hr:按照人类可读的容量单位做反向排序(从大到小排列)- 输出格式和原生
ls -lrth完全一致,不需要额外做格式调整。
内容的提问来源于stack exchange,提问作者user3299633
相关产品推荐
相关产品推荐

