如何用R高效获取MinIO指定存储桶子文件夹下的一级文件夹列表
用R高效获取MinIO指定文件夹的一级内容
核心方案:利用S3 API的前缀与分隔符参数实现精准扫描
MinIO兼容S3标准API,通过指定prefix和delimiter参数,可直接限定扫描目标路径的一级内容,无需全量拉取存储桶数据,从根源提升效率。R的minio.s3包原生支持这两个参数。
具体实现代码
1. 配置MinIO连接
library(minio.s3) # 设置MinIO连接环境变量 Sys.setenv( AWS_ACCESS_KEY_ID = "你的MinIO访问密钥", AWS_SECRET_ACCESS_KEY = "你的MinIO秘密密钥", AWS_S3_ENDPOINT = "http://你的MinIO地址:端口", AWS_REGION = "us-east-1", # MinIO默认区域,可按需修改 AWS_S3_FORCE_PATH_STYLE = TRUE # 必须开启路径模式适配MinIO )
2. 获取指定文件夹的一级子文件夹列表
以获取test_bucket中folder_2/下的一级子文件夹为例:
# 调用get_bucket获取目标路径的一级内容 bucket_response <- get_bucket( bucket = "test_bucket", prefix = "folder_2/", # 限定扫描起始路径 delimiter = "/" # 按斜杠分割路径,仅返回一级子项 ) # 提取并整理一级文件夹名称 sub_folders <- sapply(bucket_response$commonPrefixes, function(item) { gsub("folder_2/", "", item$prefix) # 去掉前缀,保留纯文件夹名 }) # 输出结果 print(sub_folders)
如果习惯用数据框格式处理,可改用get_bucket_df:
bucket_df <- get_bucket_df( bucket = "test_bucket", prefix = "folder_2/", delimiter = "/" ) # 筛选出文件夹条目并提取名称 sub_folders_df <- bucket_df[!is.na(bucket_df$common_prefix), ] sub_folders <- gsub("folder_2/", "", sub_folders_df$common_prefix) print(sub_folders)
原理说明
prefix:告诉MinIO仅扫描以该前缀开头的对象,避免全桶遍历。delimiter:指定路径分隔符后,MinIO会将匹配前缀且下一个分隔符前的路径作为commonPrefixes返回,即目标路径的一级子文件夹,不会递归扫描子文件夹内部内容。
内容的提问来源于stack exchange,提问作者tomsu
相关产品推荐
相关产品推荐

