将文件大小从MB转换为字节并使用Bash进行比较

问题描述 投票:0回答:1

我尝试使用以下方式将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做到这一点?

linux bash
1个回答
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不处理浮点数,因此使用整数可以简化操作。

© www.soinside.com 2019 - 2024. All rights reserved.