You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash脚本文件夹大小对比条件判断失效问题求助

解决Bash脚本文件夹大小判断异常的问题

你的脚本核心问题出在**du命令的单位不明确**,导致设定的FOLDER_SIZE和实际获取的文件夹大小数值不在同一维度上,自然条件判断会出错。

问题根源

不同系统下du -s的默认单位差异很大:

  • GNU系Linux(比如Ubuntu、CentOS):du -s默认输出的是**KB(1024字节)**的数值
  • BSD系系统(比如macOS):du -s默认输出的是512字节块的数值

举个例子,如果你的FOLDER_SIZE="5709119"是按KB设定的,但在macOS上用du -s拿到的是块数,那实际文件夹大小是5709119 * 512字节,远大于你以为的5709119 KB,判断逻辑自然混乱。

修复方案

统一单位是关键,下面给两种常用的修改方式:

方式1:指定du输出KB数值(适配多数Linux默认)

修改获取文件夹大小的命令,明确用-k参数指定KB单位:

#!/bin/bash
# 设定大小限制为5709119 KB(约5.4GB)
FOLDER_SIZE="5709119"
# 获取文件夹的KB大小,-k强制输出单位为KB
CHECK=$(du -sk /var/backups/ | cut -f1)
echo "Current folder size: $CHECK KB"
echo "Size limit: $FOLDER_SIZE KB"
if [[ $CHECK -gt $FOLDER_SIZE ]]; then
    echo "$CHECK KB is BIGGER THAN $FOLDER_SIZE KB"
    # 这里添加你的移动文件操作,比如:
    # mv /var/backups/*.bak /path/to/backup-archive/
else
    echo "$CHECK KB is SMALLER THAN $FOLDER_SIZE KB"
fi

方式2:指定du输出字节数值(最精确)

如果需要更精确的字节级判断,用-b参数:

#!/bin/bash
# 设定大小限制为5846137856字节(等于5709119 KB)
FOLDER_SIZE="5846137856"
# 获取文件夹的字节大小
CHECK=$(du -sb /var/backups/ | cut -f1)
echo "Current folder size: $CHECK bytes"
echo "Size limit: $FOLDER_SIZE bytes"
if [[ $CHECK -gt $FOLDER_SIZE ]]; then
    echo "$CHECK bytes is BIGGER THAN $FOLDER_SIZE bytes"
    # 添加移动操作
else
    echo "$CHECK bytes is SMALLER THAN $FOLDER_SIZE bytes"
fi

验证步骤

  1. 先在终端执行du -sk /var/backups/,看看输出的数值和脚本里的CHECK是否一致
  2. 确认FOLDER_SIZE的数值单位和du输出的单位完全匹配
  3. 运行修改后的脚本,观察条件判断是否符合实际情况

内容的提问来源于stack exchange,提问作者Boten

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:24:20