我在使用 AWS CLI 中的 *
从某个存储桶中选择文件子集时遇到问题。
像这样将 *
添加到路径中似乎不起作用
aws s3 cp s3://data/2016-08* .
要将多个文件从 aws 存储桶下载到当前目录,您可以使用 recursive
、exclude
和 include
标志。 参数的顺序很重要。
示例命令:
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
参数的顺序很重要
exclude 和 include 应该以特定的顺序使用,我们必须先排除然后包含。反之亦然不会成功。
aws s3 cp s3://data/ . --recursive --include "2016-08*" --exclude "*"
这将失败,因为在这种情况下参数的顺序很重要。包含由 * 排除
aws s3 cp s3://data/ . --recursive --exclude "*" --include "2016-08*"`
这将起作用,因为我们排除了所有内容,但后来我们包含了特定目录。
好吧,我不得不说这个例子是错误的,应该更正如下:
aws s3 cp . s3://data/ --recursive --exclude "*" --include "2006-08*" --exclude "*/*"
.
必须紧跟在 cp
之后。最后的 --exclude
是确保没有从 --recursive
拾取的任何子目录中拾取任何内容(错误地学习了一个...)
这将适用于他们到达这里时遇到此问题的任何人。
如果在使用 ‘ * ’
时出现错误,您还可以使用递归、包含和排除标志,例如
aws s3 cp s3://myfiles/ . --recursive --exclude "*" --include "file*"
不定期副业成功案例分享
--exclude "*"
不是错字。 如果您不添加它,则包含将匹配任何内容。根据文档:请注意,默认情况下,所有文件都包括在内。这意味着仅提供 --include 过滤器不会更改传输的文件。 --include 只会重新包含已从 --exclude 过滤器中排除的文件。如果您只想上传具有特定扩展名的文件,则需要先排除所有文件,然后重新包含具有特定扩展名的文件。sync
获得类似的效果,默认情况下是递归的:aws s3 sync s3://data/ . --exclude "*" --include "2016-08*"
--dryrun
标志测试“破坏性”命令,以确保通配符选择了正确的对象集。--recursive
标志是必需的。否则它将无法正常工作。