基于Docker部署MinIO及统计桶内文件夹下文件数量
基于Docker部署MinIO
确定镜像版本
由于新版docker-minIO 有很些功能不可用,此处选择版本为docker.io/minio/minio:RELEASE.2023-01-25T00-19-54Z
准备宿主机挂载目录和配置文件
cd /Users/dftshine/Career/LocalDocker/
mkdir -p docker_volumes/minio/data
mkdir -p docker_volumes/minio/configcd /Users/dftshine/Career/LocalDocker/docker_volumes/minio/config/
vim config.json.deprecated填入内容
{
"version": "29",
"credential": {
"accessKey": "admin",
"secretKey": "Admin@2025",
"api": {
"keyRotationInterval": "24h"
}
},
"region": "us-east-1",
"browser": "on",
"logger": {
"console": {
"enable": true,
"level": "info"
},
"file": {
"enable": false,
"filename": "",
"level": "info",
"rotationInterval": "24h",
"rotationMaxSize": "1GB"
}
},
"notify": {
"amqp": {},
"elasticsearch": {},
"kafka": {},
"mqtt": {},
"nats": {},
"nsq": {},
"postgres": {},
"redis": {},
"sqs": {},
"webhook": {}
},
"storage": {
"backend": "fs",
"fs": {
"diskCacheMaxSize": "0",
"diskCachePath": "",
"forceSync": false
},
"erasure": {
"codingBlocks": 0,
"dataBlocks": 0
}
},
"api": {
"cors": {
"enabled": false,
"allowedOrigins": [],
"allowedMethods": [],
"allowedHeaders": [],
"exposedHeaders": [],
"maxAge": 0
},
"trace": {
"enable": false
}
},
"console": {
"address": ":9001"
}
}脚本docker-compose-minio.yml
# docker-compose版本,兼容大部分Docker Desktop版本
services:
# MinIO服务名称,可自定义
minio:
# 指定用户要求的镜像地址
image: docker.io/minio/minio:RELEASE.2023-01-25T00-19-54Z
# 关键:强制指定架构为linux/amd64,让M系列芯片通过Rosetta 2模拟运行
platform: linux/amd64
# 容器名称,可自定义
container_name: minio-amd64-on-m-series
# 开机自启(可选,根据需求开启)
restart: always
# 端口映射:主机端口:容器端口
# 9000:MinIO的API访问端口
# 9001:MinIO的Web控制台端口(新版MinIO分离了API和控制台)
ports:
- "9000:9000"
- "9001:9001"
# 环境变量配置(核心:MinIO的访问密钥和密钥,密码至少8位)
environment:
- MINIO_ROOT_USER=admin # 自定义访问账号,可修改
- MINIO_ROOT_PASSWORD=Admin@2025 # 自定义访问密码,可修改(至少8位)
# 卷挂载:本地目录映射到容器内目录,实现数据持久化
volumes:
- /Users/dftshine/Career/LocalDocker/docker_volumes/minio/data:/data # 本地数据目录 → 容器内MinIO存储目录
- /Users/dftshine/Career/LocalDocker/docker_volumes/minio/config:/root/.minio # 本地配置目录 → 容器内MinIO配置目录
# MinIO启动命令:指定存储目录,并开放控制台端口9001
command: server /data --console-address ":9001"
# 权限配置(避免macOS下目录权限问题)
privileged: true启动
docker-compose -f docker-compose-minio.yml up -d查看界面
http://localhost:9001/. 用户名:admin 密码:Admin@2025

使用MinIO
创建桶

使用在线上传或者复制服务器文件夹
复制服务器文件夹方式,将服务器上桶下文件夹拷贝到挂载数据目录中

在线查看桶
数据已经同步过来了

创建Access Keys

统计桶内各文件夹下文件数量
Minio管理界面默认只展示桶内文件数量,没有直接提供「统计文件夹文件数」的命令 / API。
此时需要借助MC工具进行统计。
MC简介
MC(MinIO Client)是 MinIO 官方跨平台命令行工具,兼容 S3 协议,可管理 MinIO 及其他 S3 兼容对象存储服务。它支持桶 / 对象的创建、列举、复制、删除等核心操作,还能统计文件数量、管理访问别名、同步数据。轻量易用,适配 Windows/macOS/Linux,新版简化命令体系(如host替换为alias),是 MinIO 存储管理的高效工具,无需编程即可完成日常运维操作。
安装MC
执行官方安装脚本
打开 macOS 的「终端」(Terminal),直接运行以下命令:
curl https://dl.min.io/client/mc/release/darwin-arm64/mc \
--create-dirs \
-o $HOME/minio-binaries/mc说明:darwin-arm64 正是针对 macOS M 系列(ARM64 架构)的版本,脚本会将 mc 下载到 $HOME/minio-binaries/ 目录下。
添加 mc 到系统环境变量(使其全局可用)
首先给 mc 赋予执行权限:
chmod +x $HOME/minio-binaries/mc将 mc 所在目录添加到 PATH 环境变量(永久生效,适配 zsh 和 bash):
open -e ~/.zshrc在打开的配置文件末尾,添加一行内容:
export PATH=$PATH:$HOME/minio-binaries保存并关闭文件,然后让环境变量立即生效:
source ~/.zshrc验证安装是否成功
在终端中直接运行以下命令,若能输出 mc 的版本信息,说明安装并配置成功:
mc --version
使用MC(ls)进行统计
注册服务
/Users/dftshine/minio-binaries/mc alias set local_myminio http://localhost:9000 ApILszok3zBHTkUz FTFjMOWZURUpdVyTc6Qy8ustJvcFI5tR统计
/Users/dftshine/minio-binaries/mc ls -r local_myminio/energy-industry/20251226/ | wc -l
基于MC编写脚本实现统计桶内各文件夹下文件数量
注:也可以使用后续的tree命令直接统计。
编写脚本文件
minio_count_files_local.sh
需要配置mc工具的完整路径、注册的MinIO服务名称、桶的名称
#!/bin/bash
# 配置你的参数(只需要修改这 3 行!)
MC_PATH="/Users/dftshine/minio-binaries/mc" # mc 工具的完整路径
MINIO_ALIAS="local_myminio" # 你配置的 MinIO 别名
BUCKET_NAME="energy-industry" # 你的桶名(已填充你当前的桶名)
# 检查 mc 工具是否存在
if [ ! -f "$MC_PATH" ]; then
echo "错误:mc 工具路径不存在,请检查 MC_PATH 配置"
exit 1
fi
# 遍历桶下所有一级文件夹并统计文件数
echo "开始统计桶 ${BUCKET_NAME} 下所有一级文件夹的文件数(递归统计)..."
echo "========================================"
# 关键修改:适配新版 mc,通过 / 结尾判断文件夹,且排除非一级目录
# 1. 列举桶下所有一级对象(非递归)
# 2. 过滤出以 / 结尾的(即文件夹)
# 3. 去重(避免重复统计)
folders=$("$MC_PATH" ls "${MINIO_ALIAS}/${BUCKET_NAME}/" | awk '{print $NF}' | grep "/$" | sort -u)
# 检查是否找到文件夹
if [ -z "$folders" ]; then
echo "未找到任何一级文件夹,请检查桶名是否正确,或桶下是否有文件夹"
echo "========================================"
echo "统计完成!"
exit 0
fi
# 逐个统计文件夹文件数
for dir in $folders; do
# 统计该文件夹下文件数(递归,排除隐藏对象 .minio.sys)
file_count=$("$MC_PATH" ls -r "${MINIO_ALIAS}/${BUCKET_NAME}/${dir}" | grep -v ".minio.sys" | wc -l)
# 输出结果
echo "文件夹:${dir} | 文件数:${file_count}"
done
echo "========================================"
echo "统计完成!"添加脚本执行权限
chmod +x minio_count_files_local.sh运行脚本
./minio_count_files_local.sh
其他MC工具使用
同步/备份MinIO桶
本地文件夹 → MinIO 桶(上传同步)
mc mirror /本地/文件夹 myminio/mybucket/文件夹MinIO 桶 → 本地(下载 / 备份)
mc mirror myminio/mybucket/文件夹 /本地/备份目录MinIO ↔ MinIO(桶之间迁移)
mc mirror myminio/src-bucket myminio/dest-bucket注、常用选项(必记)
--overwrite:强制覆盖已修改的文件--remove:目标删除源已删除的文件(完全镜像)--dry-run:模拟运行,不真同步(先预览)--exclude:排除某种文件,如--exclude "*.log"--quiet:安静模式,只报错不刷屏
示例:
注册两个minIO服务, 本地服务 local_myminio, 服务器服务 minio_192
mc mirror --overwrite --remove minio_192/energy-industry local_myminio/energy-industry注:同步后统计文件数量有延时,需等待一段时间自动更新。
Tree
mc tree 是 MinIO Client 中可视化展示存储结构的核心命令,作用是:以「树形目录结构」列出 MinIO 桶 / 文件夹下的所有对象(文件 + 子文件夹),比 mc ls 更直观,能清晰看到目录层级关系,适合快速梳理存储结构。
基础用法
# 展示你的 local_myminio 下 energy-industry 桶的所有层级结构
/Users/dftshine/minio-binaries/mc tree local_myminio/energy-industry限制展示深度(避免层级过深刷屏)
# -d 2:只展示 2 层(桶 → 一级文件夹 → 二级内容,不再深入)
/Users/dftshine/minio-binaries/mc tree -d 2 myminio/energy-industry统计桶内文件夹分别有多少文件数量
方式 1:只看一级文件夹 + 每个文件夹的文件数(递归统计,包含子文件夹)
/Users/dftshine/minio-binaries/mc ls local_myminio/energy-industry/ | grep "/$" | awk '{print $NF}' | while read dir; do file_count=$(/Users/dftshine/minio-binaries/mc ls -r local_myminio/energy-industry/"$dir" | wc -l); echo "文件夹:$dir | 文件数:$file_count"; done方式 2:只看一级文件夹 + 仅当前文件夹文件数(非递归,不含子文件夹)
/Users/dftshine/minio-binaries/mc ls local_myminio/energy-industry/ | grep "/$" | awk '{print $NF}' | while read dir; do file_count=$(/Users/dftshine/minio-binaries/mc ls local_myminio/energy-industry/"$dir" | wc -l); echo "文件夹:$dir | 文件数:$file_count"; done