目前我正在尝试通过读取目录来检查文件大小
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
。如果您将其省略,则成功率会更高。然后,所有尺寸都以相同的单位打印。