Amazon web services AWS S3 CLI中的选择性文件下载
我在S3存储桶中有文件,我试图根据日期下载文件,比如8月8日,9月9日,我如何下载选择性日期文件?。 我使用了下面的代码,但它仍然下载整个存储桶列表Amazon web services AWS S3 CLI中的选择性文件下载,amazon-web-services,amazon-s3,Amazon Web Services,Amazon S3,我在S3存储桶中有文件,我试图根据日期下载文件,比如8月8日,9月9日,我如何下载选择性日期文件?。 我使用了下面的代码,但它仍然下载整个存储桶列表 aws s3 cp s3://bucketname/ folder/file --profile pname --exclude \"*\" --recursive --include \"" + "2015-08-09" + "*\" 我不知道如何实现这一点。此命令将复制从2015-08-15开始的所有文件: aws s3 cp s3://BU
aws s3 cp s3://bucketname/ folder/file --profile pname --exclude \"*\" --recursive --include \"" + "2015-08-09" + "*\"
我不知道如何实现这一点。此命令将复制从
2015-08-15
开始的所有文件:
aws s3 cp s3://BUCKET/ folder --exclude "*" --include "2015-08-15*" --recursive
如果您的目标是同步一组文件而不复制两次,请使用sync
命令:
aws s3 sync s3://BUCKET/ folder
aws s3 sync s3://BUCKET/ folder --exclude "*" --include "2015-08-15*"
这将复制自上次同步以来添加或修改的所有文件
实际上,这相当于上面的cp
命令:
aws s3 sync s3://BUCKET/ folder
aws s3 sync s3://BUCKET/ folder --exclude "*" --include "2015-08-15*"
参考资料:
sync
实现目标
所有终端会话都可以使用相同的令牌,以防您需要为prod环境生成令牌
$ aws s3 sync s3://bucket-name/sub-name/another-name folder-name-in-pwd/
--exclude "*" --include "name_date1*" --profile UR_AC_SomeName
和另一个终端窗口(相同pwd)
另外两个用于“name\u date3*”和“name\u date4*”
此外,您还可以在同一同步中执行多个排除
命令如下所示:
此Bash脚本将使用aws cli按修改日期将所有文件从一个bucket复制到另一个bucket。
aws s3 ls <BCKT_NAME> --recursive | sort | grep "2020-08-*" | cut -b 32- > a.txt
aws s3 ls--recursive | sort | grep“2020-08-*”| cut-b32->a.txt
内部Bash文件
while IFS= read -r line; do
aws s3 cp s3://<SRC_BCKT>/${line} s3://<DEST_BCKT>/${line} --sse AES256
done < a.txt
而IFS=read-r行;做
aws s3 cp s3://${line}s3://${line}--sse AES256
完成
Bash命令将特定日期或月份的所有文件复制到当前文件夹
命令正在执行以下操作
aws s3 cp
你能澄清你的问题吗?您的文件名中是否编码了日期,或者您希望根据对象的创建日期进行下载?@JohnRotenstein文件名为“2015-08-15T001Z.log.gz”、“2015-08-14T001Z.log.gz”等。每天将有24个文件,范围从“T001z.log.gz”到“T023z.log.gz”。我正在寻找一种方法来选择某一天的文件,例如:2015-08-15,该文件应将该日期的所有24个文件从S3复制到本地计算机。当文件夹包含几年的日志时,下载最后一天的日志需要几个小时,因为
aws s3 sync
对所有这些过滤器进行迭代,并与exclude
/include
过滤器进行比较。有什么方法可以更快地完成吗?在第3步开始之前,我会遇到致命错误:在第4步调用HeadObject操作时发生错误(404):Key
,我是否需要手动传递文件名而不是{}?
aws s3 ls s3://bucketname/ | grep '2021-02' | awk '{print $4}' | aws s3 cp s3://bucketname/{} folder