【问题标题】:AWS S3 cp failing to go throughAWS S3 cp 未能通过
【发布时间】:2014-08-28 15:06:02
【问题描述】:

我正在尝试使用 AWS s3 cp CLI 运行递归复制命令。我正在运行的命令如下(我将真实的存储桶名称替换为“mybucket”):

aws s3 cp s3://mybucket/NJ/Monthly/2014/06/ /home/bob/work/NJ/Monthly/2014/06/ --recursive --exclude "*" --include “monthly_summary_*” --region us-east-1

我还将对其进行格式化以使其适合:

aws s3 cp s3://mybucket/NJ/Monthly/2014/06/ /home/bob/work/NJ/Monthly/2014/06/ 
--recursive --exclude "*" --include “monthly_summary_*” --region us-east-1

由于某种原因,这无法正常工作。但是,它不会记录任何错误或任何类型的输出。有语法错误吗?

我已验证与“monthly_summary_*”匹配的文件确实存在于该位置的存储桶中。我还验证了我可以在没有--recursive、--exclude 和--include 的情况下执行普通的aws s3 cp 命令,并且只需指定一个文件名就可以了。意思是,下面的代码有效,但没有得到一切(因为它不是递归的):

aws s3 cp s3://mybucket/NJ/Monthly/2014/06/monthly_summary_201406.txt
/home/bob/work/NJ/Monthly/2014/06/monthly_summary_201406.txt --region us-east-1

任何帮助将不胜感激!

【问题讨论】:

  • 尝试运行这个命令:aws s3 cp s3://mybucket/NJ/Monthly/2014/06/ /home/bob/work/NJ/Monthly/2014/06/ --recursive --exclude "*" --include "monthly_summary_*" --region us-east-1
  • 这不是我上面运行的命令吗?
  • 否 - 包含参数使用智能引号,我将它们更改为哑引号。有用吗?

标签: amazon-web-services amazon-s3


【解决方案1】:

我想通了。 AWS 命令​​行工具似乎不完全支持通配符,它​​们仅支持文件扩展名。所以 ".txt" 将与 --exclude "" --include ".txt" 逻辑一起使用,但通配符如 "monthly__summary.txt" 或 "monthly_summary_ *“ 不管用。

【讨论】:

  • 真的吗?你会认为 AWS 文档会提到这一点。他们的示例仅显示扩展名,但未指定。这也很奇怪,因为 S3 实际上不是文件而是对象,并且路径只是一个“标签”。无论如何,很高兴你弄清楚了 - 现在我知道要避免尝试。
【解决方案2】:

我知道这个帖子很旧。但是想更新。该命令现在即使在使用 monthly_summary_* 时也有效!

【讨论】:

    【解决方案3】:

    如果这对我之后的其他人有用:在源和目标之间添加一些额外的空格。我一直在反对使用单引号、双引号、斜杠等的每种组合运行类似的命令:

    aws s3 cp /home/<username>/folder/ s3://<bucketID>/<username>/archive/ --recursive --exclude "*" --include "*.csv"
    

    它会给我:“aws:错误:参数太少”。单身的。大大地。一、试过了。

    所以终于在aws s3 cp help 中看到了 --debug 选项 所以再次以这种方式运行:

    aws s3 cp /home/<username>/folder/ s3://<bucketID>/<username>/archive/ --recursive --exclude "*" --include "*.csv" --debug
    

    这是相关的调试行:

    MainThread - awscli.clidriver - DEBUG - Arguments entered to CLI: ['s3', 'cp', 'home/<username>/folder\xc2\xa0s3://<bucketID>/<username>/archive/', '--recursive', '--exclude', '*', '--include', '*.csv', '--debug']
    

    我不知道\xc2\xa0 来自源和目标之间的哪个位置,但它确实存在!更新了该行以添加几个额外的空格,现在它可以正常运行了:

    aws s3 cp /home/<username>/folder/   s3://<bucketID>/<username>/archive/ --recursive --exclude "*" --include "*.csv" 
    

    【讨论】:

      【解决方案4】:

      --recursive,将其添加到 cp 命令的末尾。

      AWS 文档说:

      以下示例从 s3://bucket-name/example 复制所有对象 到 s3://my-bucket/。

      aws s3 cp s3://bucket-name/example s3://my-bucket/
      

      但它对我没有任何作用。

      aws s3 cp s3://bucket-name/example s3://my-bucket/ --recursive
      

      工作正常。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-19
        • 1970-01-01
        • 1970-01-01
        • 2018-09-16
        相关资源
        最近更新 更多