将文件大小从MB转换为字节,并使用Bash

时间:2016-09-22 19:19:44

标签: linux bash

我尝试使用以下方法将23.45 MB的变量值转换为字节,但比较失败。我通过附加0并删除MB和空格来转换值。

操作系统:Linux
语言:Bash

  

fileSize = 23.45 MB(文件大小,以MB为单位)

     

existingFileSize = 23457676(文件大小,以字节为单位)

content=$(curl -L ${url})
fileSize=`echo "${content}" | grep -o -P '(?<=fileSize">).*(?='${myFile}')' | head -c8`

fileSize=`echo ${fileSize}0000 | sed -e 's/./''/g'  | sed -e 's/MB /''/g'`

if [ "${fileSize}" != "${existingFileSize}" ]; then
   echo -e "\tFile size is different than local file size\n"
else
   echo -e "\tFile size is same as local file size\n"
fi
echo ${fileSize}
echo ${existingFileSize}

那么将文件大小MB转换为字节然后与现有文件大小进行比较的最佳方法是什么?我做谷歌搜索,但它有大部分答案从字节到MB。我怎么能用Bash做到这一点?

1 个答案:

答案 0 :(得分:1)

代码中的问题是$fileSize变为23450000,不等于23457676。如果您只关心比较的整数兆字​​节,可以使用:

croppedFileSize=${fileSize%.*}
existingMB=$(($existingFileSize/1000000))

if [ $croppedFileSize -ne $existingMB ]; then
    echo -e "\tFile size is different than local file size\n"
else
    echo -e "\tFile size is same as local file size\n"
fi

在您的示例中,croppedFileSizeexistingMB都是23,因此会打印File size is same as local file size消息。 Bash不处理浮点数,因此使用整数可以简化事情。