【问题标题】:Copy files in nested folders in S3 bucket复制 S3 存储桶中嵌套文件夹中的文件
【发布时间】:2018-10-13 08:33:11
【问题描述】:

我正在尝试使用 boto3 将源存储桶中一个文件夹中的文件复制到源文件夹下同一存储桶中的另一个文件夹。

源存储桶:测试

来源路径:A/B/C/D/E/F..

我在 C 中有一些文件,我需要将它们移动到 E。

我的问题是,lambda 正在为此循环运行。我有这个 lambda,当我的文件到达 C 时会触发它,然后触发另一个 lambda 来做其他事情。现在在这两者之间,我必须将文件从 C 移动到 E,然后触发 lambda 以执行下一个操作。

有人知道如何解决 lambda 循环运行的问题吗?

【问题讨论】:

  • 请使用您的程序进行编辑,以便我们可以有效地可视化您的问题。
  • 你想要我的代码吗?我的意思是我的复制部分正在工作,但问题是它在文件夹 E 下的复制时刻,因为这个文件夹在 C 内部(这里是一种父级)它充当触发器,这样 lambda 处于循环中。
  • 所以我的文件进入BUCKETNAME/20181012/,然后文件进入它触发一个lambda,它基本上会触发其他东西,但在触发发生之前,我需要将文件从BUCKETNAME/20181012/移动到BUCKETNAME/20181012/ABC/ 在这里,因为 ABC 在 BUCKETNAME/20181012/ 下,它仍然充当嵌套文件夹,并且 lambda 再次被触发。
  • 最好添加您的代码,以便用户可以帮助您。
  • aws 中没有文件夹,只有文件/数据,斜杠只是文件名的一部分

标签: python amazon-s3 aws-lambda


【解决方案1】:

在 S3 中没有文件夹。您最好将其视为存储桶键值。 您在控制台中看到的类似文件夹的表示只是一个可视化。

您的 Lambda 由您的存储桶中的文件修改事件触发。您必须使用 S3 事件的 prefixsuffix

您是否控制放入 S3 中的文件的名称?

  • 是的。假设您的文件名始终以new 开头。使用前缀:A/B/C/new 设置您的活动。当文件进入A/B/C/new... 时,会触发 lambda,因为它匹配前缀,当相同的文件进入 A/B/C/D/E/new... 时,不会触发 lambda,因为前缀不匹配。

  • 没有。然后更改您的文件夹层次结构。使用前缀:A/B/C/ 设置您的活动。将文件移动到任何不以A/B/C 开头的键(即“文件夹”),例如A/B/E。因此,第二个键将与前缀不匹配。

除非您可以重命名文件的后缀,否则后缀没有任何帮助。如果您能够重命名文件,您将创建一个带有后缀:.abc 的事件,并在移动文件时将其重命名为以 .xyz 结尾的内容。因此,只有 .abc 文件会触发 Lambda,无论它们位于何处。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 2018-04-19
    • 2017-11-23
    • 2015-05-20
    • 2019-12-31
    • 1970-01-01
    相关资源
    最近更新 更多