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

AngularJS项目中Bash重命名带哈希编译文件的问题求助

修正你的Bash脚本,处理带哈希的AngularJS编译文件

我来帮你逐个解决这两个问题,让脚本能正确批量重命名并移动文件到目标目录。

问题1:多扩展名匹配失败

你尝试用./src/*.{js,css,voff}的写法但报错,主要有两个原因:

  • 扩展名拼写错误:voff应该是woff
  • Bash默认在通配符无匹配时,会把通配符本身当作字符串输出,导致cp找不到不存在的./src/*.{js,css,woff}文件

解决方法是启用nullglob选项,让通配符无匹配时返回空值而非原字符串;同时用数组管理扩展名,后续新增类型也更方便。

问题2:cp命令语法错误

原来的cp $files ${DST}"${files//.*}".js有两处问题:

  • ${files//.*}会删掉文件路径中第一个点后的所有内容(比如./src/1.xxx.js会变成./src),再硬加.js就会生成错误的目标路径
  • 固定写死.js扩展名,无法处理css、woff等其他类型文件

我们需要先提取纯文件名,再用参数展开正确拆分前缀和扩展名,保留原文件类型。

修正后的完整脚本

#!/bin/bash

# 启用nullglob,避免通配符无匹配时输出原字符串
shopt -s nullglob

echo "Process web binary files!"

# 定义需要处理的扩展名列表,可按需新增
EXTENSIONS=("js" "css" "woff")
SRC_DIR="./src/"
DST_DIR="./dst/"

# 确保目标目录存在,不存在则自动创建
mkdir -p "$DST_DIR"

file_count=0

# 遍历每个扩展名,处理对应文件
for ext in "${EXTENSIONS[@]}"; do
    echo "Processing ${ext} files..."
    # 匹配当前扩展名的所有源文件
    for file in "${SRC_DIR}"*."${ext}"; do
        # 跳过空值(当该扩展名无文件时)
        [[ -f "$file" ]] || continue
        
        # 提取文件名(不含路径)
        filename=$(basename "$file")
        
        # 重命名逻辑:保留第一个点前的前缀 + 原扩展名
        # ${filename%%.*} 取第一个点之前的部分,${filename##*.} 取最后一个点之后的扩展名
        new_filename="${filename%%.*}.${filename##*.}"
        
        # 复制文件到目标目录
        cp "$file" "${DST_DIR}${new_filename}"
        
        echo "Processed: $filename -> $new_filename"
        ((file_count++))
    done
done

echo "Number of target files processed: $file_count"

脚本关键说明

  • shopt -s nullglob:避免无匹配文件时出现无效路径错误
  • mkdir -p "$DST_DIR":自动创建目标目录,已存在时不会报错
  • 数组EXTENSIONS:集中管理扩展名,后续新增类型只需修改这个数组
  • 参数展开${filename%%.*}和${filename##*.}:精准拆分文件名前缀和扩展名,完美匹配你的需求
  • 所有变量用双引号包裹:避免文件名含空格或特殊字符时出现异常

测试这个脚本,它会正确处理你给出的所有示例文件,把带哈希的文件名转换成干净的名称并移动到./dst/目录中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:55:04