如何通过Shell脚本从AWS S3存储桶文件夹下载最新2个文件?
从AWS S3存储桶下载最新2个文件的Shell脚本实现
你已经找对了列出最新文件的核心命令,接下来只需要把这些文件路径传递给aws s3 cp就能完成下载啦!这里提供两种实用的实现方式,按需选择即可:
方式一:while read循环(推荐,支持带空格的文件名)
这种方法能兼容文件名包含空格、特殊字符的场景,稳定性拉满:
# 定义你的S3存储桶路径和本地下载目录 BUCKET="s3://your-bucket-name/target-folder" LOCAL_DIR="./local-save-path" # 先确保本地目录存在,不存在就创建 mkdir -p "$LOCAL_DIR" # 遍历最新2个文件并逐一下载 aws s3 ls "$BUCKET" --recursive | sort | tail -n 2 | awk '{print $4}' | while read -r FILE_PATH; do aws s3 cp "$BUCKET/$FILE_PATH" "$LOCAL_DIR/" done
代码说明:
mkdir -p "$LOCAL_DIR":-p参数支持创建多级目录,避免因目录不存在导致下载失败。while read -r FILE_PATH:逐行读取前面输出的文件路径,-r参数能避免转义特殊字符,防止文件名解析出错。aws s3 cp "$BUCKET/$FILE_PATH" "$LOCAL_DIR/":拼接完整的S3文件地址,将文件下载到指定本地目录。
方式二:xargs命令(适合文件名无特殊字符的场景)
如果你的文件名里没有空格或特殊字符,用xargs会更简洁:
BUCKET="s3://your-bucket-name/target-folder" LOCAL_DIR="./local-save-path" mkdir -p "$LOCAL_DIR" aws s3 ls "$BUCKET" --recursive | sort | tail -n 2 | awk '{print $4}' | xargs -I {} aws s3 cp "$BUCKET/{}" "$LOCAL_DIR/"
代码说明:
xargs -I {}:把前面输出的每一行内容替换为{},再传递给后面的aws s3 cp命令,实现批量下载。
额外提醒:
- 先确认AWS CLI已配置好对应权限,可通过
aws s3 ls "$BUCKET"测试能否正常访问存储桶。 - 若要下载更多最新文件,只需修改
tail -n 2里的数字,比如改成tail -n 5就能下载最新5个文件。
内容的提问来源于stack exchange,提问作者Rootie
相关产品推荐
相关产品推荐

