如何通过变量、循环编写bash脚本读取文件S3路径执行aws s3 cp命令
Bash批量执行S3路径拷贝脚本实现
前置说明
你可以将存储S3源路径、目标路径对的文件命名为s3_copy_list.txt,脚本会按制表符为分隔符逐行读取内容执行拷贝。
完整脚本
#!/bin/bash # 批量S3文件拷贝脚本 PATH_LIST="s3_copy_list.txt" # 检查路径列表文件是否存在 if [[ ! -f "$PATH_LIST" ]]; then echo "错误:路径列表文件 $PATH_LIST 不存在" exit 1 fi # 逐行读取文件,指定制表符为字段分隔符 while IFS=$'\t' read -r SOURCE DESTINATION || [[ -n "$SOURCE" ]]; do # 跳过空行或者字段不完整的行 if [[ -z "$SOURCE" || -z "$DESTINATION" ]]; then continue fi # 可以先在aws命令前加echo试运行,确认输出命令无误后再去掉echo正式执行 echo "正在拷贝:$SOURCE -> $DESTINATION" aws s3 cp "$SOURCE" "$DESTINATION" done < "$PATH_LIST"
关键逻辑说明
IFS=$'\t'指定行内字段分隔符为制表符,完美适配你的文件格式,不会因为路径中包含空格出现拆分错误read -r参数避免路径中的特殊转义字符被bash自动转义,保证路径读取准确- 末尾的
|| [[ -n "$SOURCE" ]]兼容最后一行没有换行符的文件,避免漏掉最后一行路径 - 所有变量都用双引号包裹,避免路径含空格时执行命令出错
使用步骤
- 将你整理好的路径列表保存为
s3_copy_list.txt,和上述脚本放在同一目录下 - 给脚本添加执行权限:
chmod +x s3_batch_copy.sh - 试运行验证:把脚本中
aws s3 cp前面加echo,执行脚本后会打印所有要运行的命令,确认无误后再去掉echo - 正式执行:
./s3_batch_copy.sh
内容的提问来源于stack exchange,提问作者mht.haque
相关产品推荐
相关产品推荐

