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

使用Unix Shell脚本批量转CSV为Excel并邮件附件问题求助

批量转换CSV为Excel并全部作为邮件附件发送的解决方案

原脚本的问题在于:循环结束后f变量仅保留最后一个CSV文件的名称,导致mailx只附加了最后一个生成的Excel文件。以下是修改后的脚本及说明:

修改后的完整脚本

#!/bin/bash
# 切换到目标目录,失败则终止脚本
cd /main/subpath/dev/Int/Source/adm/at/csv_xls || exit 1

# 批量将管道分隔的CSV转换为逗号分隔的Excel格式文件
for f in *.csv; do 
    sed 's/^\||/,/g' "$f" > "${f%.csv}.xls"
done

# 构建所有Excel文件的附件参数数组
attachments=()
for xls_file in *.xls; do
    attachments+=("-a" "$xls_file")
done

# 发送包含所有附件的邮件
echo "CSV转Excel完成,共生成$(( ${#attachments[@]} / 2 ))个文件" | mailx -s "CSV转Excel结果" "${attachments[@]}" jennny@gmail.com

关键改动说明

  • 目录切换容错:添加|| exit 1,确保如果目标目录不存在或无法进入时,脚本直接终止,避免后续操作在错误路径执行。
  • 附件批量收集:用数组attachments存储每个附件对应的-a 文件名参数对,解决mailx多附件传递的兼容性问题(不同mailx版本对多附件的支持方式有差异,数组方式适配性更强)。
  • 邮件内容优化:修改邮件正文为明确的完成提示,同时显示生成的文件数量,方便接收者核对。
  • 变量作用域修正:不再依赖循环结束后的单个f变量,而是直接遍历所有生成的Excel文件,确保所有文件都被添加为附件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 16:10:34