我有这样的功能......
function size {
export FILENAME=$1
export SIZE=$(du -sb $FILENAME | awk '{ print $1 }')
awk 'BEGIN{x = ENVIRON["SIZE"]
split("Byte KiloByte MegaByte GigaByte TeraByte PetaByte ExaByte ZettaByte YottaByte", type)
for(i=8; y < 1; i--)
y = x / (2**(10*i))
print y " " type[i+2]
}'
}
size“/home/foo.bar”#1 MegaByte
如何插入:打印y“”键入[i + 2]
变量:SIZE_FILE?
测试:SIZE_FILE = $ {print y“”type [i + 2]} #error: - (
非常感谢
答案 0 :(得分:2)
$(expr)构造会将评估“expr”的结果保存到变量中:
theDate=$(date)
你也可以使用反引号,但我认为$()更具可读性:
theDate=`date`
因此,对于您的脚本,您将使用:
function size {
export FILENAME=$1
SIZE=$(du -sb $FILENAME | awk '{ print $1 }')
export FILE_SIZE=$(awk -v x=$SIZE 'BEGIN{
split("Byte KiloByte MegaByte GigaByte TeraByte PetaByte ExaByte ZettaByte YottaByte", type)
for(i=8; y < 1; i--)
y = x / (2**(10*i))
print y " " type[i+2]
}')
echo $FILE_SIZE
}
答案 1 :(得分:0)
您可以在没有awk
的情况下执行此操作,这更适合处理文本文件。
function size () {
# Non-environment variables should be lowercased
# Always quote parameter expansions, in case they contain spaces
local filename="$1"
# Simpler way to get the file size in bytes
local size=$(stat -c%s "$filename")
# You could put all the units in an array, but we'll keep it simple.
for unit in Byte KiloByte MegaByte GigaByte TeraByte PetaByte ExaByte ZettaByte YottaByte; do
echo "$size $unit"
(( size /= 1024 ))
done
}
sizes=$( size $myfile )