bash - 我可以使用 stat 来显示人类可读的文件大小吗?
问题描述
我正在尝试使用 stat 命令显示当前目录中的文件列表,按从大到小排序。我的脚本是
filelist=$(ls -p | grep -v/)
filesize=$(stat -c "%s : %n" $filelist | sort -nr)
它可以工作,但是它以字节为单位显示大小。有没有办法使用 stat 以人类可读的格式显示它?还是我必须尝试别的东西。感谢您的帮助。
解决方案
据我所知,该stat
程序本身无法显示人类可读的尺寸。但是您始终可以将其通过管道传输到执行此操作的另一个程序,例如numfmt
:
stat -c %s /path/to/file | numfmt --to=iec
应用于您的示例,它将是:
filelist=$(ls -p | grep -v/)
filesize=$(
stat -c "%s %n" $filelist | sort -nr -k1 | while read filesize filename; do
printf '%s : %s\n' "$(numfmt --to=iec <<< $filesize)" "$filename"
done
)
请注意,我-k1
在调用时添加了该选项,sort
因为我假设您想使用大小而不是名称进行排序。
numfmt
优点是您可以选择如何显示人类可读的大小。我建议--to=iec
是因为这是最常见的文件大小,但您可能希望使用其他转换。请参阅numfmt 手册页。
最后一点,我建议您不要将文件直接存储在$()
捕获之外,因为当文件名包含空格字符时它将不起作用。您可以使用find
列出文件并同时获取大小,例如:
find . -mindepth 1 -maxdepth 1 -not -type d -printf '%s %f\n' |
sort -nr -k1 |
while read filesize filename
do
printf '%s : %s\n' "$(numfmt --to=iec <<< $filesize)" "$filename"
done
推荐阅读
- python - Create process in python, only if it doesn't exist
- php - PHP fgetcsv 失败,而爆炸工作正常
- amp-html - AMP 状态不适用于 AMP.navigateTo()
- r - 在 mutate dplyr 中使用逻辑运算符
- ms-access - Textbox with reference to dropdown returns nothing
- python - 如何在 Python dict 中的值之前附加一个键?
- mysql - MySQL 需要 6 秒来计算 100k 条记录中的条件
- android - how to apply ripple effect on textview when already background set
- javascript - React: Mutating state through setTimeout return wrong results
- azure - 在 azure function app 中使用 c# 代码覆盖 host.json 文件的 functiontimeout