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

Shell脚本筛选列出指定大小范围内文件的实现方法

Shell脚本按大小区间筛选文件的问题修复

需求是列出目录下所有文件大小处于指定区间的文件,开发过程中可以正常获取目录内所有txt文件的大小,但if条件语句无法将$FILESIZE变量作为整数执行范围判断。

初始错误代码

最开始编写的存在问题的代码如下:

#!/bin/bash
for i in *.txt
do 
FILESIZE=$(stat -c%s "$i")
echo "$FILESIZE"
if [ 9 -lt $((FILESIZE)) -gt 10 ]
then 
echo "$i"
fi
done

这段代码运行后输出完全不符合预期,无法正确筛选出目标大小的文件。

踩坑说明:Shell的test条件判断(也就是[]包裹的判断逻辑)不支持a -lt b -gt c这种连续比较写法,这种写法不会按“b同时大于a、小于c”的逻辑执行,会直接导致判断逻辑失效。

修正后可用代码

调整方案:先把获取到的文件大小值转为整数存入val变量,通过两层嵌套if语句分别判断大小的上下阈值,修正后可正常运行的代码如下:

#!/bin/bash

for i in *.txt
do 
FILESIZE=$(stat -c%s "$i")
val=$((FILESIZE))
if [ $val -gt 9 ]
then 
if [ $val -lt 21 ]
then
echo "$i"
echo "size of $i is $val"
fi
fi
done

修正后的代码可以正确输出大小在10-20字节区间的txt文件名及对应大小值,完全满足筛选需求。

小提示:如果不想写嵌套判断,也可以用逻辑与参数-a把两个条件合并到同一个判断语句里,写法为if [ $val -gt 9 -a $val -lt 21 ],运行效果和嵌套判断完全一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 00:27:19