我尝试使用以下方法将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做到这一点?
答案 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
在您的示例中,croppedFileSize
和existingMB
都是23
,因此会打印File size is same as local file size
消息。 Bash不处理浮点数,因此使用整数可以简化事情。