问题发生
Minio里的图片不知道啥情况 误操作删除了(可能是昨天复制备份的时候误操作了) 还好我是开了版本控制的
所以打开console是可以一个一个文件恢复到上个版本的 无语的点就在 730张照片
没有批量恢复功能!只能一个一个点
要想批量恢复只能脚本操作 还好之前玩的时候部署了mc客户端
所以赶紧问ai怎么做
Ai选择
GPT阵亡
Xai 开启深度思考 需求提好之后 修修补补 成功恢复文件
所以别自己不会用就吐槽Xai 我觉得蛮好的
离不开自己的思考
因为Ai给我一些提示后 我就知道怎么做了 获取版本信息 从版本信息里获取参数就行了
把要恢复的目录的版本信息 写入到本地 versions.log
然后脚本读取这个versions.log文本
然后去里面找ID 找版本 找文件名
因为我一开始就指定了文件名 1-730.jpg
所以我就直接叫ai帮我写好了的脚本
途中遇到了已经恢复的文件 再次执行脚本会卡住(后续发现多等一下会继续跑 别急)
如果你也遇到相同情况 可以直接叫ai写脚本 从versions.log里获取文件名就完事了
获取要恢复的目录里文件的版本历史日志代码参考
mc ls --versions Minio/img/star/rei_kamiki/ > versions.log
批量恢复脚本代码参考
#!/bin/bash
# MinIO 路徑
minio_path="Minio/img/star/rei_kamiki"
# 版本日誌文件
log_file="versions.log"
# 檢查 mc 工具是否可用
if ! command -v mc &> /dev/null; then
echo "錯誤:mc 工具未安裝,請先安裝 MinIO Client"
exit 1
fi
# 檢查 versions.log 文件是否存在
if [ ! -f "$log_file" ]; then
echo "錯誤:版本日誌文件 $log_file 不存在"
exit 1
fi
# 創建恢復日誌文件
restore_log="restore_log_$(date +%Y%m%d_%H%M%S).log"
failed_file="failed_files.log"
echo "恢復日誌" > "$restore_log"
echo "失敗文件列表" > "$failed_file"
# 遍歷 1.jpg 到 730.jpg
for i in {1..730}; do
file="$i.jpg"
echo "處理文件: $file" | tee -a "$restore_log"
# 提取文件的 v1 版本記錄
v1_record=$(grep "v1 PUT $file" "$log_file")
if [ -z "$v1_record" ]; then
echo "警告:$file 沒有 v1 版本記錄,跳過" | tee -a "$restore_log"
echo "$file: 無 v1 版本記錄" >> "$failed_file"
continue
fi
# 調試信息
echo "調試信息:v1 記錄: $v1_record" | tee -a "$restore_log"
# 移除日期部分
cleaned_record=$(echo "$v1_record" | sed 's/\[.*\]//')
echo "調試信息:清理後記錄: $cleaned_record" | tee -a "$restore_log"
# 提取版本 ID
version_id=$(echo "$cleaned_record" | awk -F' +' '{print $4}')
if [ -z "$version_id" ]; then
echo "錯誤:無法提取 $file 的 v1 版本 ID,跳過" | tee -a "$restore_log"
echo "$file: 無法提取 v1 版本 ID" >> "$failed_file"
continue
fi
echo "恢復 $file 到 v1 版本,版本 ID: $version_id" | tee -a "$restore_log"
# 執行恢復命令
mc cp --version-id "$version_id" "$minio_path/$file" "$minio_path/$file" > /tmp/mc_output 2>&1
if [ $? -eq 0 ]; then
echo "成功恢復 $file 到 v1 版本" | tee -a "$restore_log"
else
echo "錯誤:恢復 $file 失敗" | tee -a "$restore_log"
cat /tmp/mc_output | tee -a "$restore_log"
echo "$file: 恢復失敗,版本 ID: $version_id" >> "$failed_file"
fi
done
echo "恢復完成,日誌已保存到 $restore_log" | tee -a "$restore_log"
echo "失敗文件列表已保存到 $failed_file" | tee -a "$restore_log"
完结
我只是提供一种思路 找ai写脚本 效率非常高 自己知道逻辑流程就行了
想要我一个一个点?门都没有 必须自动化!