2016-09-22 36 views
0

我尝试使用下面的方式将23.45 MB的变量值转换为字节,但比较失败。我通过追加0和删除MB和空间来转换值。将文件大小从MB转换为字节并使用bash进行比较

操作系统:Linux 语言:猛砸

档案大小= 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吗?

+2

你最初在哪里设置'fileSize'? –

+0

从URL获取它,让我来提一下。谢谢乔尼! –

+2

然后你的问题将四舍五入的问题,你不能完全比较它们,因为MB版本是一个四舍五入的值。如果你想你可以在本地获得四舍五入的值,并希望它们匹配 – Rob

回答

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 

在你的榜样,无论croppedFileSizeexistingMB23,所以它打印File size is same as local file size消息。 Bash不处理浮点数,所以使用整数可以让事情变得简单。

+0

谢谢,但它不是确切的文件比较使用前两位数字。 –

+0

@JiteshSojitra:你问的问题是“......将文件大小MB转换为字节然后与现有文件大小进行比较的最佳方法”。这个回答在可能的范围内回答了Q.您需要更新您的Q以表明您希望“仅使用前两位数字进行文件比较”(并且最好首次发布正确的Q,以免人们浪费时间)。祝你们好运。 – shellter

相关问题