如何使用通配符来使用AWS CLI"cp"一组文件

met*_*rsk 79 amazon-s3 amazon-web-services aws-cli

*在AWS CLI中使用时无法从某个存储桶中选择文件的子集.

添加*到这样的路径似乎不起作用

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

pun*_*lly 126

为了从AWS桶下载多个文件到当前目录,你可以使用recursive,excludeinclude标志是这样的:

aws s3 cp s3://data/ . --recursive --exclude "*" --include "2016-08*"
Run Code Online (Sandbox Code Playgroud)

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

  • 我想指出`-排除“ *”不是错字。*如果您不添加它,则包含内容将匹配任何内容*。根据文档:请注意,默认情况下,所有文件都包括在内。这意味着仅提供--include过滤器将不会更改要传输的文件。--include将仅重新包括从--exclude过滤器中排除的文件。如果只想上传具有特定扩展名的文件,则需要首先排除所有文件,然后重新包含具有特定扩展名的文件。 (9认同)
  • 您还可以使用 `sync` 来达到类似的效果,默认情况下是递归的:`aws s3sync s3://data/ 。--排除“*” --包括“2016-08*”` (4认同)
  • 注意排除和包括的顺序。 (2认同)
  • 最好使用“--dryrun”标志测试“破坏性”命令,以确保通配符选择正确的对象集。 (2认同)
  • 还要注意的是,需要“--recursive”标志。否则它不会起作用。 (2认同)

lon*_*tar 43

参数顺序很重要

exclude和include应该按特定顺序使用,我们必须先排除然后再包含.反之亦然.

aws s3 cp s3://data/ . --recursive  --include "2016-08*" --exclude "*" 
Run Code Online (Sandbox Code Playgroud)

这将失败,因为在这种情况下参数的顺序是重要的.包含被*排除在外

aws s3 cp s3://data/ . --recursive --exclude "*" --include "2016-08*"`
Run Code Online (Sandbox Code Playgroud)

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


小智 5

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

aws s3 cp . s3://data/ --recursive --exclude "*" --include "2006-08*" --exclude "*/*"
Run Code Online (Sandbox Code Playgroud)

.需求是后右cp。最后--exclude是确保没有从--recursive(错误地了解到一个......)

当他们到达这里时,这将适用于任何为此而苦苦挣扎的人。

  • 这是为了将当前本地当前目录复制到指定的 S3 位置。所有其他响应都是从 s3 位置复制到您本地的当前目录 (5认同)