refactor: Improve backup restoration logic in Cursor MAC ID modifier

- Enhanced restore feature with robust file discovery using `find`
- Added comprehensive error handling and validation for backup restoration
- Improved file selection process with sorted backup file list
- Implemented proper file permissions and ownership restoration
- Fixed potential edge cases in backup file selection and restoration
This commit is contained in:
煎饼果子卷鲨鱼辣椒 2025-02-08 15:39:19 +08:00
parent 4407650e67
commit 2bb74b41e0

View File

@ -538,50 +538,64 @@ modify_mac_address() {
# 新增恢复功能选项 # 新增恢复功能选项
restore_feature() { restore_feature() {
local backup_files=("$BACKUP_DIR"/*.backup_*) # 检查备份目录是否存在
if [ ! -d "$BACKUP_DIR" ]; then
log_warn "备份目录不存在"
return 1
}
# 检查是否存在备份文件 # 使用find命令获取备份文件列表
if [ ! -e "$BACKUP_DIR"/*.backup_* ]; then mapfile -t backup_files < <(find "$BACKUP_DIR" -name "*.backup_*" -type f 2>/dev/null | sort)
# 检查是否找到备份文件
if [ ${#backup_files[@]} -eq 0 ]; then
log_warn "未找到任何备份文件" log_warn "未找到任何备份文件"
return return 1
fi }
echo echo
log_info "可用的备份文件:" log_info "可用的备份文件:"
echo "0) 退出 (默认)" echo "0) 退出 (默认)"
local i=1
for backup in "${backup_files[@]}"; do # 显示备份文件列表
echo "$i) $(basename "$backup")" for i in "${!backup_files[@]}"; do
((i++)) echo "$((i+1))) $(basename "${backup_files[$i]}")"
done done
echo echo
echo -n "请选择要恢复的备份文件编号 [0-$((i-1))] (默认: 0): " echo -n "请选择要恢复的备份文件编号 [0-${#backup_files[@]}] (默认: 0): "
read -r choice read -r choice
# 如果用户直接按回车或输入0则退出 # 处理用户输入
if [ -z "$choice" ] || [ "$choice" = "0" ]; then if [ -z "$choice" ] || [ "$choice" = "0" ]; then
log_info "跳过恢复操作" log_info "跳过恢复操作"
return return 0
fi fi
# 验证输入是否为有效数字 # 验证输入
if ! [[ "$choice" =~ ^[0-9]+$ ]] || [ "$choice" -ge "$i" ]; then if ! [[ "$choice" =~ ^[0-9]+$ ]] || [ "$choice" -gt "${#backup_files[@]}" ]; then
log_error "无效的选择" log_error "无效的选择"
return return 1
fi fi
# 获取选择的备份文件 # 获取选择的备份文件
local selected_backup="${backup_files[$((choice-1))]}" local selected_backup="${backup_files[$((choice-1))]}"
if [ -f "$selected_backup" ]; then # 验证文件存在性和可读性
if cp "$selected_backup" "$STORAGE_FILE"; then if [ ! -f "$selected_backup" ] || [ ! -r "$selected_backup" ]; then
log_info "已从备份文件恢复配置: $(basename "$selected_backup")" log_error "无法访问选择的备份文件"
else return 1
log_error "恢复配置失败" }
fi
# 尝试恢复配置
if cp "$selected_backup" "$STORAGE_FILE"; then
chmod 644 "$STORAGE_FILE"
chown "$CURRENT_USER" "$STORAGE_FILE"
log_info "已从备份文件恢复配置: $(basename "$selected_backup")"
return 0
else else
log_error "选择的备份文件不存在" log_error "恢复配置失败"
return 1
fi fi
} }