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

如何用Unix脚本检查S3桶指定10个文件的存在性及非零大小

实现步骤与脚本示例

你之前只获取了S3的文件名,没拿到对应大小,所以得先把S3桶里的文件名和大小都存下来,再逐一校验预期文件的存在性和大小。下面是完整的落地方案:

#!/bin/bash

# 配置参数(替换为你的实际信息)
SrcDir="s3://your-target-bucket/folder-path"
FILE_LIST="./fileslist.txt"
LOG_FILE="./s3_file_validation.log"
NOTIFY_EMAIL="source-team@your-domain.com"

# 初始化日志
echo "=== S3文件校验日志 - $(date '+%Y-%m-%d %H:%M:%S') ===" >> $LOG_FILE

# 将S3桶内的文件名与大小存入关联数组,方便快速查询
declare -A s3_file_map
aws s3 ls $SrcDir/ | awk '{print $4, $3}' | while read file_name file_size; do
    s3_file_map["$file_name"]=$file_size
done

# 标记是否存在异常
error_flag=0

# 遍历预期文件列表逐一校验
while read expected_file; do
    # 跳过空行
    [[ -z "$expected_file" ]] && continue

    # 检查文件是否存在
    if [[ -z "${s3_file_map[$expected_file]}" ]]; then
        echo "[ERROR] 文件缺失:$expected_file 未在S3桶中找到" >> $LOG_FILE
        error_flag=1
    else
        # 检查文件大小是否大于0KB
        file_size=${s3_file_map[$expected_file]}
        if [[ $file_size -eq 0 ]]; then
            echo "[ERROR] 文件无效:$expected_file 大小为0KB" >> $LOG_FILE
            error_flag=1
        else
            echo "[SUCCESS] 文件正常:$expected_file 存在,大小为 ${file_size}KB" >> $LOG_FILE
        fi
    fi
done < $FILE_LIST

# 异常情况发送通知
if [[ $error_flag -eq 1 ]]; then
    echo "S3文件校验发现异常,详情请查看日志:$LOG_FILE" | mailx -s "S3文件校验失败通知" $NOTIFY_EMAIL
    exit 1
else
    echo "所有预期文件校验通过" >> $LOG_FILE
    exit 0
fi

关键细节说明

  • 关联数组存储:用declare -A创建键值对数组,把S3文件名映射到对应大小,后续查询效率更高。
  • 日志持久化:所有校验结果追加到日志文件,方便回溯问题。
  • 通知机制:用mailx发送邮件通知(如果你的环境没有mailx,可以替换为企业微信Webhook、Slack机器人等其他通知方式)。
  • 空行兼容:自动跳过fileslist.txt中的空行,避免无效校验。

使用注意事项

  1. 确保AWS CLI已配置好访问目标S3桶的权限。
  2. 若fileslist.txt中的文件名包含空格,需在while read前添加IFS=$'\n',确保按完整文件名读取。
  3. 根据实际环境调整通知方式的命令。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 23:15:58