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

时间:2017-07-25 10:54:51

标签: amazon-s3 aws-cli

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

  

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”开头的文件?

2 个答案:

答案 0 :(得分: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 :(得分:0)

据我了解,--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/% .

复制文件。