我在AWS CLI中使用*从某个桶中选择文件的子集时遇到了麻烦。

像这样向路径添加*似乎不起作用

Aws s3 cp s3://data/2016-08* .使用实例


当前回答

要将多个文件从aws桶下载到当前目录,可以使用递归、排除和包含标志。 参数的顺序很重要。

示例命令:

aws s3 cp s3://data/ . --recursive --exclude "*" --include "2016-08*"

有关如何使用这些过滤器的更多信息:http://docs.aws.amazon.com/cli/latest/reference/s3/#use-of-exclude-and-include-filters

其他回答

如果在使用' * '时出现错误,您还可以使用递归,包括和排除标志,如

Aws s3 cp s3://myfiles/。——递归——排除“*”——包括“file*”

要将多个文件从aws桶下载到当前目录,可以使用递归、排除和包含标志。 参数的顺序很重要。

示例命令:

aws s3 cp s3://data/ . --recursive --exclude "*" --include "2016-08*"

有关如何使用这些过滤器的更多信息:http://docs.aws.amazon.com/cli/latest/reference/s3/#use-of-exclude-and-include-filters

参数的顺序很重要

排除和包括应该按照特定的顺序使用,我们必须先排除,然后再包括。反之则不会成功。

aws s3 cp s3://data/ . --recursive  --include "2016-08*" --exclude "*" 

这将失败,因为在这种情况下参数的顺序很重要。include被*排除

aws s3 cp s3://data/ . --recursive --exclude "*" --include "2016-08*"`

这个可以工作,因为我们排除了所有内容,但后来我们包含了特定的目录。

好吧,我不得不说这个例子是错误的,应该纠正如下:

aws s3 cp . s3://data/ --recursive --exclude "*" --include "2006-08*" --exclude "*/*"

的。需要在cp之后。最后的——exclude是为了确保从——递归拾取的任何子目录中都没有拾取任何东西(错误地学习了一个…)

这将适用于任何在这里挣扎的人。

正如其他人所指出的那样,您可以对——include和——exclude标志做任何您想做的事情。你不能简单使用的原因

aws s3 cp s3://data/2016-08* .

S3 uri不是POSIX路径,不像BASH或其他shell那样解析POSIX glob字符。实际上,*字符和许多其他glob字符是S3对象URI中的有效字符,因此您的命令要求复制一个文本名为S3://data/2016-08*的文件。如果没有该名称的对象,则S3将响应该对象不存在。