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

修复stat命令xargs占位符无法展开问题 批量查询多格式图片大小

问题原因

原脚本存在以下核心错误:

  • 用单引号包裹了整段要执行的脚本,xargs的_占位符在单引号内不会被替换,导致实际传入stat的路径是字面量_,自然找不到对应文件
  • sed的扩展名替换逻辑没有限定匹配位置,可能误删路径中间出现的png/jpg字符
  • 存在多处变量未加双引号的问题,遇到带空格的路径会直接报错
  • 嵌套多层echo、管道、sh调用的写法逻辑过于绕,非常容易出现引号转义错误
修复后的可用脚本
find images -type f \( -name "*.png" -o -name "*.jpg" \) | while read -r srcimg; do
    # 定义获取文件大小的工具函数,找不到文件返回0
    getimgsize() {
        stat -c "%s" "$1" 2>/dev/null || echo 0
    }
    # 用shell内置参数扩展去掉源文件扩展名,无需调用sed
    srcimgnoext="${srcimg%.*}"
    # 读取三种格式的文件大小
    srcimgsize=$(getimgsize "$srcimg")
    webpsize=$(getimgsize "${srcimgnoext}.webp")
    avifsize=$(getimgsize "${srcimgnoext}.avif")
    # 按要求格式输出
    echo "$srcimg: $srcimgsize | webp: $webpsize | avif: $avifsize"
done
优化点说明
  • 改用while read遍历find的输出结果,避免了xargs和sh嵌套调用的转义问题,逻辑更清晰
  • 用shell内置的参数扩展${srcimg%.*}处理扩展名,比调用sed性能更高,也不会出现匹配错误
  • 所有变量都用双引号包裹,完美兼容带空格、特殊字符的文件路径
  • 增加了错误处理逻辑,对应格式的文件不存在时会输出0,不会抛出多余的报错信息

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 21:45:07