试图删除 s3 文件夹中的文件,但该命令正在删除整个目录本身

Attempting to delete files in s3 folder but the command is removing the entire directory itself

我有一个 s3 存储桶,其中有 4 个文件夹,现在是 input/。 在 py 代码末尾运行我的气流 DAG 之后,有几行试图删除 input/.

中的所有文件
response_keys = self._s3_hook.delete_objects(bucket=self.s3_bucket, keys=s3_input_keys)
        deleted_keys = [x['Key'] for x in response_keys.get("Deleted", []) if x['Key'] not in ['input/']]
        self.log.info("Deleted: %s", deleted_keys)

        if "Errors" in response_keys:
            errors_keys = [x['Key'] for x in response_keys.get("Errors", [])]
            raise AirflowException("Errors when deleting: {}".format(errors_keys))

现在,这有时会删除所有文件,有时会删除目录本身。我不确定为什么要删除它,即使我已经明确排除了它。

有没有其他方法可以尝试实现删除?

PS 我尝试使用 BOTO,但 AWS 的安全性不允许两者都访问存储桶。所以 Hook 就是我的全部。请帮忙

A​​mazon S3 中不存在目录。相反,对象的 Key(文件名)包含 完整路径 。例如,密钥可能是 invoices/january.xls,其中包括路径。

在路径中创建对象时,目录会神奇地出现。如果目录中的所有对象都被删除,那么该目录就会神奇地消失(因为它实际上从未存在过)。

但是,如果您单击 Amazon S3 管理控制台中的 创建文件夹 按钮,则会创建一个带有目录名称的 zero-byte 对象。这会强制目录为 'appear',因为该路径中有一个对象。然而,该目录实际上并不存在!

因此,您的 Airflow 作业可能会删除给定路径中的所有对象,这会导致目录消失。这很好,没有什么可担心的。但是,如果使用创建文件夹按钮创建文件夹,则删除所有对象后文件夹仍然存在(假设删除操作没有同时删除zero-length对象)。