如何包含和复制当前目录中的文件到s3(而不是递归)

时间:2014-02-11 19:32:41

标签: amazon-web-services amazon-s3 aws-cli

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

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

所以这就是我现在拥有的命令

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

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

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

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

4 个答案:

答案 0 :(得分:39)

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

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

答案 1 :(得分:5)

尝试命令:

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

希望有所帮助。

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

答案 3 :(得分:1)

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