我使用命令来获取远程文件夹的大小,在它运行后返回
120928312 http://blah.com
Run Code Online (Sandbox Code Playgroud)
数字是以字节为单位的大小.我想做的是以MB输出,并http
删除部分.我猜对文件很好,但不知道如何去做.
tec*_*rus 13
你可以用shell builtins做到这一点
some_command |while read KB dummy;do echo $((KB/1024))Mb;done
Run Code Online (Sandbox Code Playgroud)
这是一个更有用的版本:
#!/bin/sh
human_print(){
while read B dummy; do
[ $B -lt 1024 ] && echo ${B} bytes && break
KB=$(((B+512)/1024))
[ $KB -lt 1024 ] && echo ${KB} kilobytes && break
MB=$(((KB+512)/1024))
[ $MB -lt 1024 ] && echo ${MB} megabytes && break
GB=$(((MB+512)/1024))
[ $GB -lt 1024 ] && echo ${GB} gigabytes && break
echo $(((GB+512)/1024)) terabytes
done
}
echo 120928312 http://blah.com | human_print
Run Code Online (Sandbox Code Playgroud)
这条线怎么样:
$ echo "120928312 http://blah.com" | awk '{$1/=1024;printf "%.2fMB\n",$1}'
118094.05MB
Run Code Online (Sandbox Code Playgroud)
function bytes_for_humans {
local -i bytes=$1;
if [[ $bytes -lt 1024 ]]; then
echo "${bytes}B"
elif [[ $bytes -lt 1048576 ]]; then
echo "$(( (bytes + 1023)/1024 ))KiB"
else
echo "$(( (bytes + 1048575)/1048576 ))MiB"
fi
}
$ bytes_for_humans 1
1 Bytes
$ bytes_for_humans 1024
1KiB
$ bytes_for_humans 16777216
16MiB
Run Code Online (Sandbox Code Playgroud)
尝试使用bash builtins 执行此操作(显示类似KB版本的整数)
var="120928312 http://blah.com"
echo "$(( ${var%% *} / 1024)) MB"
Run Code Online (Sandbox Code Playgroud)
bc
和printf
bc
并可printf
用于显示具有可配置小数位数的输出,还可以对数字进行分组:
$ KB=1234567890
$ echo "$KB / 1000" | bc -l | xargs -i printf "%'.1f MB" {}
1,234,567.9 MB
Run Code Online (Sandbox Code Playgroud)
numfmt
用于numfmt
自动缩放输出单位:
$ numfmt --from=iec --to=si 123456789K
127G
$ numfmt --from=si --to=iec 123456789K
115G
Run Code Online (Sandbox Code Playgroud)
用于numfmt
输出到固定单位,例如M
:
$ numfmt --from=iec --to-unit=1M --grouping 123456789K
126,420
$ numfmt --from=si --to-unit=1Mi --grouping 123456789K
117,738
Run Code Online (Sandbox Code Playgroud)
请参阅其手册页并确保正确使用它。