有没有办法获取亚马逊s3存储桶中的文件夹名称列表


Is there any way to get list of folder names in amazon s3 bucket?

我正在使用 s3cmd 编写用于上传文件夹的 PHP 脚本,如果在 amazon S3 存储桶中找不到。首先,我需要获取所有文件夹名称并将其存储在数组中,然后使用array_search检查数组是否存在文件夹名称并继续下一步。

我在PHP中使用了get_object_list和list_objects,两者都不会只返回文件夹名称。所以我想知道有什么办法可以做到.

Amazon S3 使用的是"平面"存储系统。它实际上不支持文件夹/子目录。相反,子目录路径存储为文件名的一部分,称为"密钥"。

例如,存储在名为 bar 的文件夹中的foo.txt实际上会创建一个键名为 bar/foo.txt 的对象。检索对象时,它看起来好像在 bar 目录中,但实际上并非如此。

S3 确实支持检索通用前缀列表的功能,该列表实际上是目录列表,但不能保证此类前缀始终存在,尤其是对于空目录。

与其编写脚本来"如果未找到则上传文件夹",不如查看 AWS 命令行界面 (CLI)。它包括一个命令aws s3 sync,可以在位置之间自动复制文件,包括仅复制新文件或修改的文件。这可能完全避免了您编写自己的脚本的需要。

Amazon S3 是一个具有平面命名空间的云/对象存储。Amazon S3 上没有文件夹或目录的概念。你所拥有的是一个key及其CommonPrefixes

为了获得类似的POSIX感觉,可以使用ListObjects()和特殊的分隔符来为文件系统浏览提供模拟。

https://github.com/minio/mc 就是为了这样的目的而构建的,你想要的在mc中很容易做到。

以下是有关如何查看其工作的示例方法。 mc具有进度条、会话管理、脚本友好的--json输出等等。

$ mc --json ls https://s3.amazonaws.com/miniocloud | jq 'if .type == "folder" then .name else empty end'
"G/"
"Go/"
"asdfasdfadsf/"
"bin/"
"ema/"
"emacs/"
"new/"
"te1231231231231231231231/"
"test/"