【问题标题】:Move files in S3 bucket to folder based on file name pattern根据文件名模式将 S3 存储桶中的文件移动到文件夹
【发布时间】:2020-03-06 20:21:45
【问题描述】:

我有一个包含几千个文件的 S3 存储桶,其中文件名始终与模式 {hostname}.{contenttype}.{yyyyMMddHH}.zip 匹配。我想创建一个每天运行一次的脚本,以根据文件名中的年份和月份将这些文件移动到文件夹中。

如果我尝试以下 aws-cli 命令

aws s3 mv s3://mybucket/*.202001* s3://mybucket/202001/

我收到以下错误:

fatal error: An error occurred (404) when calling the HeadObject operation: Key "*.202001*" does not exist

是否有我可以按计划运行的 aws-cli 命令来实现此目的?

【问题讨论】:

    标签: amazon-s3 aws-cli


    【解决方案1】:

    我认为前进的道路是通过--filter parameter used in S3 CLI commands

    所以,对于你的情况,

    aws s3 mv s3://mybucket/ s3://mybucket/202001/ --recursive --exclude "*" --include "*.202001*"
    

    应该可以解决问题。

    关于调度CLI命令每天运行,我想你可以参考On AWS, run an AWS CLI command daily

    【讨论】:

    • 谢谢,不好意思我没有注意到我自己的包含和排除参数。
    • 旁注,如果您使用 --recursive 选项多次运行脚本,则 s3://mybucket/202001/ 中的文件将移动到 s3://mybucket/202001/202001/。我删除了递归选项以满足我的需要。