使用minio客户端mc工具迁移指定文件到本地
如果需要筛选MinIO桶中的特定文件进行迁移,可以使用MinIO Client(mc)工具结合一些命令行技巧来实现。以下是具体步骤:
1、安装 MinIO Client(mc)
wget https://dl.min.io/client/mc/release/linux-amd64/mc -P /usr/local/bin/
chmod +x /usr/local/bin/mc
2.、配置源和目标MinIO服务
使用`mc alias set`命令为源MinIO和目标MinIO服务设置别名。
mc alias set source http://source-minio-server:9000 source-access-key source-secret-key
mc alias set destination http://destination-minio-server:9000 destination-access-key destination-secret-key
3.、筛选并迁移特定文件
假设你想迁移源存储桶`source-bucket`中以`特定前缀`开头的文件到目标存储桶`destination-bucket`。
方法1:使用`mc find`和`mc cp`组合
1. 使用`mc find`命令列出符合条件的文件。
2. 使用`mc cp`命令将这些文件复制到目标存储桶。
mc find source/source-bucket --name "特定前缀*" | xargs -I {} mc cp {} destination/destination-bucket/
- `mc find source/source-bucket --name "特定前缀*"`:列出源存储桶中以`特定前缀`开头的所有文件。
- `xargs -I {}`:将`mc find`的输出作为`mc cp`的输入。
- `mc cp {} destination/destination-bucket/`:将每个文件复制到目标存储桶。
方法2:使用`mc mirror`和`--include`选项
如果你需要同步整个存储桶,但只想包含特定模式的文件,可以使用`mc mirror`命令的`--include`选项。
mc mirror --include "特定前缀*" source/source-bucket destination/destination-bucket
- `--include "特定前缀*"`:只迁移以`特定前缀`开头的文件。
方法3:使用脚本
为了后续方便迁移指定大量文件,我这里使用mc cp 并编写shell脚本实现
执行脚本前先按照前面第一步下载安装好mc,然后执行这一句设置好要从哪台minio服务器上迁移文件:
1、先指定minio服务器
/usr/local/bin/mc alias set 别名(任意起一个别名) http://minioIP:port 账号/密码
2、创建file_list.txt文件
内容填写要下载的文件名,每个文件名占用一行:
脚本如下:
#!/bin/bash
# 定义 MinIO 别名和存储桶
MC_ALIAS="sytyminio" #(上一步任意起的别名)
BUCKET="syty" #(文件所在的桶名)
# 本地目录
LOCAL_DIR="/data_2/3-26" #(文件下载后的存放路径)
# 文件列表路径
FILE_LIST="$LOCAL_DIR/file_list.txt" #要下载的文件名
# 确保本地目录存在
mkdir -p "$LOCAL_DIR"
# 读取文件列表并逐个下载
while IFS= read -r FILE; do
# 跳过空行
if [[ -z "$FILE" ]]; then
continue
fi
echo "Downloading: $FILE"
/usr/local/bin/mc cp "$MC_ALIAS/$BUCKET/$FILE" "$LOCAL_DIR/"
# 检查下载是否成功
if [[ $? -ne 0 ]]; then
echo "Failed to download: $FILE"
else
echo "Successfully downloaded: $FILE"
fi
done < "$FILE_LIST"
echo "Download process completed!"