ChatGPT解决这个技术问题 Extra ChatGPT

如何通过 AWS CLI 使用通配符来“cp”一组文件

我在使用 AWS CLI 中的 * 从某个存储桶中选择文件子集时遇到问题。

像这样将 * 添加到路径中似乎不起作用

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


p
punkrockpolly

要将多个文件从 aws 存储桶下载到当前目录,您可以使用 recursiveexcludeinclude 标志。 参数的顺序很重要。

示例命令:

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 过滤器不会更改传输的文件。 --include 只会重新包含已从 --exclude 过滤器中排除的文件。如果您只想上传具有特定扩展名的文件,则需要先排除所有文件,然后重新包含具有特定扩展名的文件。
请注意排除和包含的顺序。
您也可以使用 sync 获得类似的效果,默认情况下是递归的:aws s3 sync s3://data/ . --exclude "*" --include "2016-08*"
最好使用 --dryrun 标志测试“破坏性”命令,以确保通配符选择了正确的对象集。
还需要注意的是,--recursive 标志是必需的。否则它将无法正常工作。
l
loneStar

参数的顺序很重要

exclude 和 include 应该以特定的顺序使用,我们必须先排除然后包含。反之亦然不会成功。

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

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

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

这将起作用,因为我们排除了所有内容,但后来我们包含了特定目录。


A
Arturo Moncada-Torres

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

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

. 必须紧跟在 cp 之后。最后的 --exclude 是确保没有从 --recursive 拾取的任何子目录中拾取任何内容(错误地学习了一个...)

这将适用于他们到达这里时遇到此问题的任何人。


这是为了从您当前的本地当前目录复制到指定的 S3 位置。所有其他响应正在从 s3 位置复制到您的本地当前目录
M
MD. RAKIB HASAN

如果在使用 ‘ * ’ 时出现错误,您还可以使用递归、包含和排除标志,例如

aws s3 cp s3://myfiles/ . --recursive --exclude "*" --include "file*"