如何匹配文件名第二部分指定日期变量循环打包对应CSV文件
问题根因
你修改后的代码失效的核心原因是:仅在筛选前缀的环节过滤了包含$DATE_EXPORT的文件,但执行zip打包时的匹配规则仍为"$prefix"_*.csv,会把对应前缀下所有日期的csv文件都打包进压缩包,没有实现只打包指定日期文件的需求。
可行解决方案
以下是修正后的可运行代码:
printf '%s\n' *_*.csv | grep "^[^_]*_${DATE_EXPORT}_" | cut -d_ -f1 | uniq | while read -r prefix do zip "$ZIP_PATH/${prefix}_${DATE_EXPORT}_M2.zip" "${prefix}_${DATE_EXPORT}"_*.csv done
优化说明
- 调整了grep匹配规则,仅匹配**第二部分等于
$DATE_EXPORT**的文件,避免日期出现在文件名其他位置导致的误匹配 - 修正了zip阶段的文件匹配规则,明确限定为
${prefix}_${DATE_EXPORT}_*.csv,只会打包对应前缀、对应日期的文件 - 所有变量都用双引号包裹,避免路径、变量含空格时出现执行异常
内容的提问来源于stack exchange,提问作者SA2018
相关产品推荐
相关产品推荐

