我有一些文件要复制到s3。 我不是每个文件都进行一次调用,而是希望将它们全部包含在一个调用中(尽可能高效)。
但是,如果我添加--recursive标志,它似乎只能让它工作,这使它看起来在所有子目录中(我想要的所有文件只在当前目录中)
所以这就是我现在拥有的命令
aws s3 cp --dryrun . mybucket --recursive --exclude * --include *.jpg
但理想情况下我想删除--recursive来阻止它遍历, 例如这样的事情(不起作用)
aws s3 cp --dryrun . mybucket --exclude * --include *.jpg
(我已经简化了示例,在我的脚本中我有几种不同的包含模式)
答案 0 :(得分:39)
AWS CLI的S3通配符支持有点原始,但您可以使用多个--exclude
选项来完成此操作。 注意:includes
和excludes
的顺序非常重要。
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