如何编写Bash脚本循环执行AWS S3跨桶年月同步命令?
实现S3指定年份的年月文件夹批量同步脚本
核心思路
通过Shell循环遍历指定年份的12个带前导零的月份,拼接成和你S3桶一致的年月文件夹名称,逐个执行aws s3 sync命令完成同步。
脚本示例
#!/bin/bash # 设置要同步的目标年份,修改这个值就能切换不同年份 TARGET_YEAR="2022" # 遍历01到12的月份(自动生成带前导零的格式) for MONTH in {01..12}; do # 拼接成年月文件夹名,比如202201、202202 FOLDER="${TARGET_YEAR}${MONTH}" # 打印同步进度提示(可选) echo "开始同步文件夹: ${FOLDER}" # 执行同步命令,源桶和目标桶的路径一一对应 aws s3 sync "s3://bucket_one/${FOLDER}" "s3://bucket_two/${FOLDER}" # 如果想忽略不存在文件夹的错误,把上面一行改成: # aws s3 sync "s3://bucket_one/${FOLDER}" "s3://bucket_two/${FOLDER}" || true done
关键部分说明
{01..12}:Shell的序列生成语法,直接生成01到12的带前导零字符串,完美匹配你的文件夹命名规则。- 变量拼接:
${TARGET_YEAR}${MONTH}把年份和月份字符串拼在一起,得到完整的文件夹名。 aws s3 sync:这个命令会增量同步内容,只复制源文件夹中新增或修改的文件,比直接复制更高效。
注意事项
- 确保你的AWS CLI已经配置好访问权限,能正常读写两个S3桶。
- 如果某个月份的文件夹在源桶中不存在,默认会输出错误信息但继续执行后续循环;如果不想看到错误,就加上
|| true忽略错误。 - 可以根据需要调整
TARGET_YEAR的值,比如改成2023就能同步2023年的所有月份文件夹。
内容的提问来源于stack exchange,提问作者Oxana Grey
相关产品推荐
相关产品推荐

