【问题标题】:How to select a file from aws s3 by using wild character如何使用通配符从 aws s3 中选择文件
【发布时间】:2015-06-15 12:19:19
【问题描述】:

我在 s3 存储桶中有很多文件,我想复制开始日期为 2012 年的文件。下面的命令复制所有文件。

aws s3 cp s3://bp-dev/bp_source_input/ C:\Business_Panorama\nts\data\in --recursive  --include "201502_nts_*.xlsx"

【问题讨论】:

  • 该通配符有效吗?如果不是,您收到的错误是什么?

标签: amazon-web-services amazon-s3 amazon-emr


【解决方案1】:

您可能希望在包含过滤器之前添加“--exclude”标志。

AWS CLI 采用过滤器“--include”将其包含在您现有的搜索中。由于正在返回所有文件,因此您需要先排除所有文件,然后再包括 2015*.xlsx。

如果你想要只有“201502_nts_*.xlsx”格式的文件,你可以运行aws s3 cp s3://bp-dev/bp_source_input/ C:\Business_Panorama\nts\data\in --recursive --exclude * --include "201502_nts_*.xlsx"

【讨论】:

  • 嘿,这对我有用。我还有一个问题 。我想先做 ls 看看文件是否存在,然后我应该复制。这是抛出错误..aws s3 ls s3://bp-dev/bp_source_input/ --recursive --exclude --include "201502_nts_.xlsx"
  • --exclude 和 --include 过滤器标志仅适用于 s3 对象操作(例如 cp、mv、rm)。 ls 是目录操作。您可以运行 ls 命令并将其通过管道传递给 grep:aws s3 ls s3://bp-dev/bp_source_input/ --recursive | grep 201502_nts_*.xlsx
  • grep 是一个 unix 命令(我不应该假设您在 *nix 系统上)。您在哪种机器上运行 aws cli?
  • 它来自 windows..对不起,这是我的错。
  • 我认为windows的等价物是findstraws s3 ls s3://bp-dev/bp_source_input/ --recursive | findstr 201502_nts_*.xlsx
【解决方案2】:

我必须在 --exclude * 通配符周围添加引号,所以它看起来像:

aws s3 cp s3://bp-dev/bp_source_input/ C:\Business_Panorama\nts\data\in --recursive --exclude "*" --include "201502_nts_*.xlsx"

【讨论】:

    【解决方案3】:

    经过多轮检查并从 bsnchan 获得帮助后,我能够在 aws s3 cli 中使用 exclude 和 include 命令。请确保正确放置空格。

    用于复制特定文件:

    aws s3 cp s3://itx-agj-cons-ww-bp-dev/bp_source_input/ C:\Business_Panorama\nts\data\in  --recursive --exclude "*" --include "*%mth_cd%_%source%_all.xlsx"
    

    (注意mth_cd是bat文件中使用的参数)

    用于检查文件是否存在。

    aws s3 ls s3://itx-agj-cons-ww-bp-dev/bp_source_input/ --recursive | FINDSTR  "201502_nts_.*.xlsx"
    

    (注意:windows cli,对于 unix,它将是 grep)

    非常感谢。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-01
      • 2020-08-06
      • 1970-01-01
      • 2019-05-02
      • 1970-01-01
      • 1970-01-01
      • 2019-08-31
      • 1970-01-01
      相关资源
      最近更新 更多