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

标签 linux bash

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

操作系统:Linux
语言:Bash

fileSize=23.45 MB (file size in MB)

existingFileSize=23457676 (file size in bytes)

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 执行此操作?

最佳答案

您的代码中的问题是 $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 不处理 float ,因此使用整数使事情变得简单。

关于linux - 将文件大小从 MB 转换为字节并使用 Bash 进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39647255/

相关文章:

git - Git 会跟踪重命名的文件夹吗?

linux - 在脚本内使用没有密码的 sudo

c++ - g++ -I 不按指定顺序工作

python - 如果我取消调用它的终端,PostgreSQL 填充进程会死掉吗?

bash - 从 Bash 中的 $PATH 变量中删除路径的最优雅方法是什么?

bash - 连接多个文件

linux - 在备份脚本中保留 n 个最近的目录

xml - Linux XML 解析器库

linux - 如何在构建期间测量 CPU、内存和磁盘使用情况?

bash - 如何在命令行上从 sbt-dynver 获取版本?