如何在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
相关产品推荐
相关产品推荐

