【问题标题】:Download Inventory File from AWS S3从 AWS S3 下载库存文件
【发布时间】:2020-11-22 02:00:38
【问题描述】:

我已将 AWS 配置为在以下位置自动创建清单文件。只是为了解释清单文件是一个 csv.gz 文件,其中包含整个存储桶(名为 Bucket1)的目录列表。每周都会在此处创建一个带有乱码名称的文件:

Location: Bucket2\Inventory\Data\filename_gibberish.csv.gz

问题:我希望我的 bash 脚本能够根据 AWS 上的“最后修改”时间戳找到最新的清单文件。然后检查我的本地目录是否有这个文件?如果没有,请下载。

请帮忙!

【问题讨论】:

    标签: bash amazon-web-services amazon-s3 aws-cli


    【解决方案1】:

    此命令将列出最近创建的对象:

    aws s3api list-objects --bucket my-bucket --prefix Inventory/Data/ --query 'sort_by(Contents, &LastModified)[-1].Key' --output text
    

    可以与复制命令结合使用:

    aws s3 cp s3://my-bucket/$(aws s3api list-objects --bucket my-bucket --prefix Inventory/Data/ --query 'sort_by(Contents, &LastModified)[-1].Key' --output text) inventory.csv.gz
    

    (请注意,存储桶名称在该命令中出现了两次。)

    【讨论】:

    • 谢谢约翰。 list 命令效果很好。但是第二个命令会抛出一个错误,说 key 不存在。似乎它试图找到存储桶键名的截断版本
    • 另外,这不会检查文件是否已存在于我的本地电脑中。如果是,则不应再次下载
    • 您可以对 Johns 命令使用 aws s3 sync 而不是 aws s3 sync,这将做同样的事情,但只会复制新的和更新的文件。 “递归地将新的和更新的文件从源目录复制到目标。” :)
    • 我上面的代码将最近的对象(具有未知名称)复制到具有特定名称的本地目录。如果您希望保留 AWS Inventory 提供的“随机”名称,那么我同意您应该改用 aws s3 sync 将任何新文件下载到您的本地目录。然后你的问题是弄清楚每个是什么时候生成的。
    猜你喜欢
    • 1970-01-01
    • 2019-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-19
    • 2019-03-04
    • 2018-10-10
    相关资源
    最近更新 更多