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

如何使用awk按多字段分隔符实现批量重命名文件

问题根因

你之前的awk -F "[.|Data20]"写法存在语法错误:正则中[]表示字符集匹配,会把括号内的每个单个字符都作为分隔符,而非匹配Data20这个完整字符串,所以完全无法拆分出你需要的FSIContract片段。

可行方案

推荐直接用Shell内置的参数扩展实现,不需要额外调用awk,性能更高且逻辑更清晰:

# 定义日期变量,用$()替代反引号兼容性更好
DATE=$(date +'%y%m%d')

# 遍历所有匹配规则的原文件
for FILENAME in PFSI4C.CSC.CCC.FSIContractData*.zip; do
    # 去掉.zip后缀
    base_no_suffix=${FILENAME%.zip}
    # 把开头的P替换为T
    base_with_T=T${base_no_suffix#P}
    # 去掉末尾8位旧日期字符
    name_prefix=${base_with_T%????????}
    # 拼接新日期和后缀得到最终文件名
    NEW_FILENAME="${name_prefix}20${DATE}.zip"
    # 先加echo运行验证输出的文件名是否正确,确认没问题后删除echo即可执行重命名
    echo mv "$FILENAME" "$NEW_FILENAME"
done

如果你偏好使用awk实现,也可以用正则替换直接生成新文件名,写法更简洁:

DATE=$(date +'%y%m%d')
for FILENAME in PFSI4C.CSC.CCC.FSIContractData*.zip; do
    NEW_FILENAME=$(echo "$FILENAME" | awk -v new_date="$DATE" '{
        # 替换开头的P为T
        sub(/^P/, "T");
        # 替换末尾的旧日期后缀为新日期
        sub(/Data[0-9]{8}\.zip$/, "Data20" new_date ".zip");
        print
    }')
    echo mv "$FILENAME" "$NEW_FILENAME"
done

内容的提问来源于stack exchange,提问作者codehunter-py

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 23:45:03