使用特定前缀的过滤器从aws-cli下载S3

问题描述 投票:4回答:2

由于某种原因,有一堆包含许多不同文件的存储桶,所有这些文件都具有相同的前缀但具有不同的日期:

backup.2017-01-01aa

backup.2017-01-01ab

backup.2017-01-15aa

backup.2017-01-15ab

backup.2017-02-01aa

backup.2017-02-01ab

等等..

如何仅下载以“backup.2017-01-01”开头的文件?

amazon-s3 aws-cli
2个回答
7
投票

你必须使用aws s3 sync s3://yourbucket/

您可以为aws s3同步提供两个参数; --exclude和--include,两者都可以使用“*”通配符。

首先,我们必须--exclude "*"排除所有文件,然后我们将--include "backup.2017-01-01*"包含我们想要的具有特定前缀的所有文件。显然你可以改变包围,所以你也可以做像--include "*-01-01*"这样的事情。

就是这样,这是完整的命令:

aws s3 sync s3://yourbucket/ . --exclude "*" --include "backup.2017-01-01*"

此外,请记住使用--dryrun测试您的命令,并避免下载存储桶中的所有文件。


1
投票

据我了解,--include在本地进行过滤。因此,如果您的存储桶包含数百万个文件,则该命令可能需要数小时才能运行,因为它需要下载存储桶中所有文件名的列表。此外,一些额外的网络流量。

但是aws s3 ls可以使用截断的文件名列出所有相应的文件,而不需要任何额外的流量。所以你可以

aws s3 ls s3://yourbucket/backup.2017-

看到你的文件,等等

aws s3 ls s3://yourbucket/backup.2017- | colrm 1 31 | xargs -I % aws s3 cp s3://yourbucket/% .

复制你的文件。

© www.soinside.com 2019 - 2024. All rights reserved.