如何检查文件大小然后回显?

如何检查文件大小然后回显?

目前我正在尝试通过读取目录来检查文件大小

read directory

dirsize=$(du -sh $directory)

if [[ "$dirsize" -ge 2MB ]]; then
  echo 'High'

elif [[ "$dirsize" -le 2MB ]]; then
  echo 'Low'

fi

问题是当我检查文件大小时,输出将像

4.0K ./....../... 32M ./....../...

因此,当我编写代码时,它不起作用,我不知道如何修复。例如,

if [[ "$dirsize" -ge 2MB ]]; then
   echo 'High'

从上面的代码来看,我的观点是,如果文件大于 2MB,则回显“High”。您能给出建议吗?

答案1

du返回大小和文件/目录名称。由于您只需要大小,因此只需读取第一部分。而且您需要的是字节数,而不是 iec 大小。

您可以使用numfmt将 iec 数字转换为字节(请参阅man numfmt)。

bash 可以使用数字比较运算符来比较数字(参见man test)。

# use only the first part of the output from "du" and use size in bytes
read -r size _ <<<"$( du -sb directory )"
# convert 2M to bytes
size2m="$( numfmt --from=iec 2M )"

# now compare the pure numbers
if [[ ${size} -ge ${size2m} ]]; then
    echo "High"
fi

if [[ ${size} -le ${size2m} ]]; then
    echo "Low"
fi

答案2

问题是当我检查文件大小时,输出将像

4.0K ./....../... 32M ./....../...

-h该输出是您通过提供( --human-readable) 选项来选择的输出du。如果您将其省略,则成功率会更高。然后,所有尺寸都以相同的单位打印。

相关内容