脚本问题排查:通过mailx发送最新时间戳的压缩xlsx附件
脚本错误排查与修正
现存问题点
- 错误打包所有xlsx文件:当前
zip命令使用*.xlsx通配符,会把目录下所有xlsx文件都打包,没有筛选出时间戳最新的文件。 - 冗余的递归压缩与路径问题:已经通过
cd进入目标目录,却仍使用完整路径指定文件;且-r参数是用于递归压缩目录的,打包单个文件完全不需要,反而会导致压缩包内包含多层目录结构。 - 附件处理逻辑冗余且有风险:通过
for循环遍历所有*.zip文件,可能会误加入其他无关的zip文件,而实际上我们只需要指定生成的report.zip即可。 - 未使用的冗余变量:定义了
dt变量但全程未调用,属于无用代码。
修正后的脚本
#!/bin/bash # 切换到目标目录,切换失败则直接退出 cd /dev/abd_dev/alb/test/Scripts/albt/at || exit 1 # 筛选出时间戳最新的xlsx文件(按文件名逆序排序,取第一个) latest_xlsx=$(ls abt_rpt_*.xlsx | sort -r | head -n 1) # 仅压缩最新的xlsx文件,无需递归参数 zip report.zip "$latest_xlsx" # 直接指定附件发送邮件 echo "Hi, File Attached" | mailx -s "Test" -a report.zip test@gmail.com
关键修正说明
- 筛选最新文件:用
ls abt_rpt_*.xlsx匹配目标格式文件,sort -r按文件名逆序排列(时间戳最新的文件名会排在首位),head -n 1提取出最新文件。 - 简化压缩操作:去掉
-r参数,直接使用当前目录下的文件名打包,避免压缩包内出现多余的目录层级。 - 简化邮件逻辑:直接通过
-a report.zip指定附件,无需遍历所有zip文件,避免误加无关附件。 - 增加容错机制:
cd ... || exit 1确保目录切换失败时脚本立即终止,防止后续步骤在错误路径下执行。
内容的提问来源于stack exchange,提问作者Jenifer
相关产品推荐
相关产品推荐

