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

Bash遍历目录HTML文件的For循环导致内容丢失如何解决?

错误原因分析
  • if条件语法错误
    Bash中字符串比较判断必须放在[]或[[]]结构中,你写的if $f = index.html会被shell解析为「执行名为$f的命令,传入参数=和index.html」,该命令必然执行失败,导致if分支永远不触发,index.html永远不会被跳过。
  • 路径匹配逻辑错误
    你定义的FILES是带完整路径的通配符,遍历得到的$f是类似/run/media/george/General/testing/xxx.html的全路径字符串,就算if语法正确,拿全路径和纯文件名index.html比较也永远为假,不可能跳过目标目录下的index.html。
  • 相对路径读取错误
    脚本中head -n 51 index.html用的是相对路径,如果你执行脚本时的工作目录不是/run/media/george/General/testing/,会读取不到正确的index.html文件,head命令执行失败会导致拼接内容为空。
  • 变量未加引号保护
    所有$f没有用双引号包裹,当文件名包含空格、特殊字符时会被shell拆分为多个参数,极端情况下会导致tail命令读取空输入,输出内容为空,最终生成的临时文件内容异常。
修复后可正常运行的代码
# 先切换到目标目录,避免相对路径问题
cd /run/media/george/General/testing/ || exit 1

for f in *.html;
do
    # 修正if判断语法,直接匹配纯文件名
    if [[ "$f" == "index.html" ]]
    then
        echo "skip main file"
    else    
        echo "Updating $f file..."
        tmp=$(mktemp) && 
        { head -n 51 index.html; tail -n +52 "$f"; } > "$tmp" &&
        mv -- "$tmp" "$f"
    fi
done

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 23:48:03