2016-09-22 45 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

相關問題