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

如何在Bash中使用if语句判断文件大小并统计字符数

你写的原有实现不正确,存在多处语法和逻辑错误,具体问题和修正方案如下:

原有脚本的错误点
  • 文件遍历逻辑不可靠:通过ls的输出赋值给变量再遍历的写法,遇到文件名带空格、换行或特殊字符时会直接拆分错误,导致后续处理完全失效
  • 大小判断逻辑完全错误:判断条件中使用的是所有文件列表的变量$FILES而非当前遍历的单个文件$f,同时语法存在括号不配对、管道符错误使用在[ ]判断内的问题,无法正常执行
  • 输出内容错误:跳过提示的语句写的是echo "Skipping $",无法输出对应的文件名
  • 缺失边界分支:小于1000字节的文件没有对应处理逻辑,会被直接忽略
  • 缺少文件类型校验:如果传入的参数是目录、管道等非普通文件,后续大小统计会报错
修正后的可运行脚本
#!/bin/bash
# 直接遍历传入的所有文件参数,兼容带特殊字符的文件名
for f in "$@"
do
    # 先判断是否是普通文件,排除目录等特殊情况
    if [ ! -f "$f" ]; then
        echo "$f 不是普通文件,跳过"
        continue
    fi
    echo "Processing $f file..."
    # 获取文件字节大小,Linux下用stat -c %s,macOS可替换为stat -f %z
    # 跨系统兼容写法可以换成:file_size=$(wc -c < "$f")
    file_size=$(stat -c %s "$f")
    if [ "$file_size" -gt 1000 ]; then
        echo "Skipping $f"
    elif [ "$file_size" -eq 1000 ]; then
        # 统计字符数输出
        wc -c "$f"
    else
        # 小于1000字节的场景不需要处理可以删除该分支
        echo "$f 大小小于1000字节,不处理"
    fi
done
使用方法

将脚本保存为count_1k.sh,执行chmod +x count_1k.sh添加执行权限后,传入需要处理的文件即可,比如运行./count_1k.sh *.txt就会处理当前目录下所有txt文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 22:24:02