如何使用 s3cmd 列出所有空文件夹

问题描述

我已经上传了 5k+ 个文件夹,每个文件夹应该有一个文件一个文件夹(这个子文件夹然后包含各种文件)到 DigitalOcean Spaces(S3 存储)。

看起来有些上传失败(长话短说)。有没有办法使用 s3cmd 列出所有空文件夹?

解决方法

我在这里的评论是关于 Amazon S3,但同样适用于 DigitalOcean Spaces。

“文件夹”实际上并不存在于 S3 中。例如,您可以将文件上传到 invoices/january/inv1.txt,S3 将神奇地创建 invoicesjanuary 文件夹。然后,如果您删除该对象,这些文件夹将神奇地消失。因此,文件夹在对象“在”文件夹中时会自动出现

可以通过创建一个与路径同名的零长度对象来创建一个空文件夹。例如,创建一个键为 invoices/ 的零长度对象将强制显示一个文件夹,即使它是空的(因为它实际上不是空的!)。这是当人们单击“创建文件夹”按钮时 S3 管理控制台创建文件夹的方式。

因此,当您询问如何“列出所有空文件夹”时,这实际上取决于这些文件夹最初是如何创建的,或者它们是否实际上是创建的!很可能从一开始就从未创建过这些文件夹。

如果您的目标是修复失败的上传,您可以使用 s3cmd sync 函数,该函数可以重新上传对象,但其智能程度足以仅复制目标中不存在或已更改的文件。