30

我有一些文件要复制到 s3。我不想对每个文件进行一次调用,而是希望将它们全部包含在一次调用中(尽可能高效)。

但是,如果我添加 --recursive 标志,我似乎只能让它工作,这使它在所有子目录中查找(我想要的所有文件都只在当前目录中)

所以这是我现在的命令,有效

aws s3 cp --dryrun . mybucket --recursive --exclude * --include *.jpg

但理想情况下,我想删除 --recursive 以阻止它遍历,例如像这样的东西(这不起作用)

aws s3 cp --dryrun . mybucket --exclude * --include *.jpg

(我已经简化了示例,在我的脚本中我有几种不同的包含模式)

4

4 回答 4

48

AWS CLI 的 S3 通配符支持有点原始,但您可以使用多个--exclude选项来完成此操作。注意:和的顺序很重要。includesexcludes

aws s3 cp --dryrun . s3://mybucket --recursive --exclude "*" --include "*.jpg" --exclude "*/*"
于 2014-10-16T04:38:49.737 回答
5

试试命令:

aws s3 cp --dryrun . s3://mybucket --recursive --exclude "*/"

希望它有所帮助。

于 2016-01-12T04:07:55.267 回答
2

我尝试了建议的答案,但无法让 aws 跳过嵌套文件夹。尽管使用了排除标志,但看到了一些关于计算大小和 0 大小对象的奇怪输出。

我最终放弃了这个--recursive标志并使用 bash 为每个匹配的文件执行单个 s3 上传。--dryrun准备好滚动后移除!

for i in *.{jpg,jpeg}; do aws --dryrun s3 cp ${i} s3://your-bucket/your-folder/${i}; done
于 2017-07-29T01:02:05.617 回答
1

我建议使用一个名为 s4cmd 的实用程序,它为我们提供类似 unix 的文件系统操作,它还允许我们包含通配符 https://github.com/bloomreach/s4cmd

于 2014-10-21T11:18:17.250 回答