You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

优化生成文本文件的s5cmd+awk命令,提速Minio海量文件列表导出

高效生成Minio文件列表的优化方案

针对你当前单线程遍历导致效率低下的问题,结合你的存储结构和硬件配置,给你几个实用的优化方案:

1. 开启s5cmd的并行能力

s5cmd本身支持多线程并发,默认并发数较低,直接调高工作线程数,同时用内置格式输出省去awk的管道开销:

s5cmd --endpoint-url http://192.168.1.40:9000 --numworkers 32 ls --format "%n" "s3://ccdata/minhash/20*/**" > minhash_listings.txt
  • --numworkers 32:根据服务器CPU核心数调整,比如R370如果是16核,设为32刚好跑满并发
  • --format "%n":直接输出对象的相对路径,不用再通过awk提取,减少不必要的计算

2. 按目录拆分并发任务

利用已知的84个一级日期目录结构,用GNU parallel拆分任务,进一步提升并行度:

# 先导出所有一级日期目录
s5cmd --endpoint-url http://192.168.1.40:9000 ls "s3://ccdata/minhash/" | awk '{print $NF}' | grep -E '20[0-9]{2}-[0-9]{2}/$' > first_level_dirs.txt
# 并发遍历每个一级目录,总并发数=16(目录级并发)*4(每个目录的线程数)=64
cat first_level_dirs.txt | parallel -j 16 s5cmd --endpoint-url http://192.168.1.40:9000 --numworkers 4 ls --format "%n" "s3://ccdata/minhash/{}**" >> minhash_listings.txt

这种方式把大任务拆成多个小任务并行,能充分利用服务器的空闲资源。

3. 直接遍历本地ZFS存储(最快方案)

既然Minio是本地部署在ZFS池上,直接绕开S3 API,用find遍历本地文件系统——ZFS的元数据存在NVMe上,遍历速度比通过S3 API快几个数量级:

# 替换成你的Minio本地存储路径,比如Minio data目录下的ccdata bucket路径
find /mnt/minio/data/ccdata/minhash/ -type f -name "*.json.gz" | sed 's|^/mnt/minio/data/ccdata/minhash/||' > minhash_listings.txt
  • find直接扫本地文件,完全利用ZFS的元数据性能
  • sed用来去掉本地路径前缀,得到和S3 API输出一致的相对路径,确保输出格式和之前一致

4. 每日增量生成(减少重复工作量)

如果每日新增的文件都集中在对应日期的目录下,不用每次全量遍历,只处理当日新增目录即可:

# 示例:处理2024-10目录的新增文件
find /mnt/minio/data/ccdata/minhash/2024-10 -type f -name "*.json.gz" | sed 's|^/mnt/minio/data/ccdata/minhash/||' >> minhash_listings.txt

如果需要维护全量列表,可以先保留前一天的基础列表,每日追加增量后去重即可。

内容的提问来源于stack exchange,提问作者Keven Scharaswak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 15:47:38