合肥做网站大概多少钱学编程去哪里学比较好
2026/4/18 16:29:31 网站建设 项目流程
合肥做网站大概多少钱,学编程去哪里学比较好,wordpress上传与安装包,做vi 设计国外网站macOS恢复模式终端备份脚本#xff1a;无依赖、保层级、避冲突的完整方案 文章目录macOS恢复模式终端备份脚本#xff1a;无依赖、保层级、避冲突的完整方案一、恢复模式备份的核心痛点二、核心功能与实现逻辑三、关键技术点与解决方案1. 替代缺失命令#xff1a;用纯bash实…macOS恢复模式终端备份脚本无依赖、保层级、避冲突的完整方案文章目录macOS恢复模式终端备份脚本无依赖、保层级、避冲突的完整方案一、恢复模式备份的核心痛点二、核心功能与实现逻辑三、关键技术点与解决方案1. 替代缺失命令用纯bash实现basename功能2. 避免eval依赖用数组传递tar排除参数3. 兼容bash 3.2严格遵循原生语法4. 强化容错性提前检查失败处理四、最终完整脚本可直接预置五、恢复模式下的实操执行步骤适配无复制粘贴环境步骤1提前预置脚本到外接备份磁盘正常开机状态下操作步骤2恢复模式下挂载磁盘并执行脚本六、脚本常见问题与解决方案问题1脚本执行报错「/bin/bash^M: bad interpreter: No such file or directory」问题2报错「command not found」针对date/tar/find等命令问题3打包目录时报错「No space left on device」问题4报错「Permission denied」权限不足问题5脚本执行无响应无日志输出七、总结当Mac因系统故障进入恢复模式时终端是备份文件的核心工具。但恢复模式下的bash版本通常为3.2语法限制多、部分命令缺失如basename/eval同时外接磁盘空间有限、多目录备份易出现同名冲突——更关键的是恢复模式无图形界面、无法访问网络无法直接复制粘贴脚本内容这些问题都让备份变得棘手。本文将从实际踩坑经验出发一步步构建完全适配恢复模式环境的备份脚本实现「多目录批量备份保留路径层级排除指定目录无外部命令依赖」的目标同时提供「提前预置脚本」的实操流程和常见问题排查指南附最终可直接运行的完整脚本。一、恢复模式备份的核心痛点在编写脚本前需先明确恢复模式下的特殊限制命令缺失basename、eval等常用命令可能不存在且环境变量不完整需用绝对路径调用系统命令bash版本低bash 3.2不支持高级语法如复合条件|| {}函数定义/数组操作需严格遵循原生语法空间有限外接备份磁盘容量不足需提前检查空间避免备份中途中断同名冲突不同目录下的同名文件/目录易覆盖需保留原路径层级无法复制粘贴恢复模式无网络、无图形界面剪贴板无法直接从网页复制脚本需提前将脚本预置到备份磁盘。二、核心功能与实现逻辑我们需要实现的备份逻辑多目录批量处理支持同时备份多个分散的目录保留路径层级每个待备份目录的内容独立存放在备份盘的对应子目录下自动区分文件/目录文件直接复制保留元数据目录打包为tar.gz并排除指定目录如.git/node_modules容错性强化跳过不存在的目录、清理打包失败的残缺文件、提前检查磁盘空间适配无复制粘贴环境支持提前预置脚本到备份磁盘恢复模式下直接调用执行。三、关键技术点与解决方案针对恢复模式的限制需对脚本做针对性适配1. 替代缺失命令用纯bash实现basename功能恢复模式中basename命令可能缺失通过bash字符串截取实现路径最后一级的提取get_last_part(){localPATH_STR$1PATH_STR${PATH_STR%/}# 去除末尾斜杠echo${PATH_STR##*/}# 截取最后一个斜杠后的内容}2. 避免eval依赖用数组传递tar排除参数恢复模式无eval命令通过数组传递参数替代字符串拼接直接传递给target_exclude_array(){localexclude_arr()forDIRin.gitnode_modules;doexclude_arr(--exclude$DIR)doneecho${exclude_arr[]}}# 调用示例localexclude_params($(get_exclude_array))/usr/bin/tar zcfp$TAR_FILE_PATH${exclude_params[]}$SOURCE_ITEM3. 兼容bash 3.2严格遵循原生语法函数定义需保证{前有空格内部语句完整避免复合语法如|| {}改用显式if/else判断系统命令均用绝对路径如/bin/date//usr/bin/tar。4. 强化容错性提前检查失败处理磁盘空间检查备份前验证可用空间预留2GB余量残缺文件清理打包失败时自动删除不完整的tar.gz文件目录不存在处理跳过不存在的待备份目录不中断整体流程。四、最终完整脚本可直接预置以下是适配所有恢复模式限制的无依赖备份脚本已整合所有功能可直接预置到备份磁盘#!/bin/bash# 配置项已适配实际场景EXCLUDE_DIRS(.gitnode_modules)BACKUP_TARGET_ROOT/Volumes/S1/MyBackupSOURCE_DIRS(/Volumes/data/projects/Volumes/soft/repos)# 检查目录存在check_dir_exists(){localDIR$1if[!-d$DIR];thenecho错误目录不存在 -$DIRreturn1fireturn0}# 检查磁盘空间check_disk_space(){localDIR$1localFREE_SPACE$(/bin/df -k$DIR|/usr/bin/tail -1|/usr/bin/awk{print $4})localMIN_SPACE$((2048*1024))if!/usr/bin/echo$FREE_SPACE|/usr/bin/grep -q^[0-9]*$;thenecho警告无法获取磁盘空间跳过检查return0fiif[$FREE_SPACE-lt$MIN_SPACE];thenecho错误空间不足可用$((FREE_SPACE/1024))MB需2GBexit1fiecho磁盘空间检查通过可用$((FREE_SPACE/1024))MB}# 替代basenameget_last_part(){localPATH_STR$1PATH_STR${PATH_STR%/}echo${PATH_STR##*/}}# 构建排除参数数组get_exclude_array(){localexclude_arr()forDIRin${EXCLUDE_DIRS[]};doexclude_arr(--exclude$DIR)doneecho${exclude_arr[]}}# 处理单个备份项process_source_item(){localSOURCE_ITEM$1localPARENT_SOURCE_DIR$2localPARENT_DIR_NAME$(get_last_part$PARENT_SOURCE_DIR)localITEM_NAME$(get_last_part$SOURCE_ITEM)localTIMESTAMP$(/bin/date %Y%m%d_%H%M%S)localBACKUP_SUB_DIR$BACKUP_TARGET_ROOT/$PARENT_DIR_NAME/bin/mkdir -p$BACKUP_SUB_DIR||{echo 无法创建子目录;return1;}if[-f$SOURCE_ITEM];thenecho 复制文件$ITEM_NAME/bin/cp -p$SOURCE_ITEM$BACKUP_SUB_DIR/[$?-eq0]echo 成功$PARENT_DIR_NAME/$ITEM_NAME||echo 失败elif[-d$SOURCE_ITEM];thenlocalTAR_FILE_NAME${ITEM_NAME}_${TIMESTAMP}.tar.gzlocalTAR_FILE_PATH$BACKUP_SUB_DIR/$TAR_FILE_NAMElocalexclude_params($(get_exclude_array))echo 打包目录$ITEM_NAME-$TAR_FILE_NAME/usr/bin/tar zcfp$TAR_FILE_PATH${exclude_params[]}$SOURCE_ITEMif[$?-eq0];thenecho 成功$PARENT_DIR_NAME/$TAR_FILE_NAMEelse[-f$TAR_FILE_PATH]/bin/rm -f$TAR_FILE_PATHecho 失败fielseecho 跳过不支持的类型$ITEM_NAMEfi}# 主流程echoechomacOS恢复模式备份脚本最终版echo执行时间$(/bin/date%Y-%m-%d %H:%M:%S)echo备份目标$BACKUP_TARGET_ROOTechoif!check_dir_exists$BACKUP_TARGET_ROOT;thenecho创建备份根目录$BACKUP_TARGET_ROOT/bin/mkdir -p$BACKUP_TARGET_ROOT||{echo创建失败;exit1;}ficheck_disk_space$BACKUP_TARGET_ROOTlocalSOURCE_DIRforSOURCE_DIRin${SOURCE_DIRS[]};doecho----------------------------------------if!check_dir_exists$SOURCE_DIR;thenecho跳过不存在的目录$SOURCE_DIRcontinuefilocalDIR_NAME$(get_last_part$SOURCE_DIR)echo处理目录$SOURCE_DIRecho备份层级$BACKUP_TARGET_ROOT/$DIR_NAMEecho----------------------------------------/usr/bin/find$SOURCE_DIR-maxdepth1-mindepth1|whileread-r ITEM;doprocess_source_item$ITEM$SOURCE_DIRdonedoneechoecho备份完成路径$BACKUP_TARGET_ROOTechoexit0五、恢复模式下的实操执行步骤适配无复制粘贴环境由于macOS恢复模式无网络访问、无图形界面剪贴板无法直接复制粘贴脚本需采用「提前预置脚本到备份磁盘」的方案具体步骤如下步骤1提前预置脚本到外接备份磁盘正常开机状态下操作正常启动Mac将外接备份磁盘如S1连接到电脑确保磁盘为可写格式APFS/ExFAT避免NTFS只读打开「终端」输入nano /Volumes/S1/backup_final.sh直接在备份磁盘根目录创建脚本将上述完整脚本粘贴到nano编辑器中按需修改BACKUP_TARGET_ROOT已默认适配/Volumes/S1/MyBackup按CtrlO保存Enter确认文件名CtrlX退出nano赋予脚本执行权限输入chmod x /Volumes/S1/backup_final.sh安全弹出外接备份磁盘备用确保脚本已成功存储在磁盘中。步骤2恢复模式下挂载磁盘并执行脚本关闭故障Mac进入恢复模式搭载Apple芯片M1/M2等按住电源键直到出现「加载启动选项」选择「选项」→「继续」搭载Intel芯片开机时按住Command (⌘) R直到出现Apple标志恢复模式启动后打开「磁盘工具」找到外接备份磁盘如S1点击右上角「挂载」若显示「已锁定」先点击「解锁」并输入磁盘密码关闭「磁盘工具」打开「实用工具」→「终端」切换到备份磁盘根目录输入cd /Volumes/S1对应你的备份磁盘名称可通过ls /Volumes查看所有挂载磁盘验证脚本是否存在输入ls确认能看到backup_final.sh文件执行备份脚本输入./backup_final.sh或绝对路径/Volumes/S1/backup_final.sh避免路径问题等待脚本执行完毕大型目录如docker/k8s打包时间较长执行完成后终端会提示「备份完成」安全弹出备份磁盘输入diskutil unmount /Volumes/S1即可移除磁盘完成备份。六、脚本常见问题与解决方案在实操过程中容易遇到以下问题针对性解决方案如下问题1脚本执行报错「/bin/bash^M: bad interpreter: No such file or directory」原因脚本在Windows编辑器中编辑过引入了Windows换行符^M即\rmacOS bash无法识别解决方案在恢复模式终端中清理Windows换行符命令如下# 进入脚本所在目录如/Volumes/S1cd/Volumes/S1# 清理换行符并生成新脚本backup_fixed.shtr-d\rbackup_final.shbackup_fixed.sh# 赋予新脚本执行权限chmodx backup_fixed.sh# 执行新脚本./backup_fixed.sh预防措施仅在macOS终端nano/vim或Mac原生文本编辑器如TextEdit需切换为「纯文本模式」中编辑脚本避免使用Windows编辑器如Notepad、Word。问题2报错「command not found」针对date/tar/find等命令原因恢复模式环境变量缺失直接调用命令无法找到路径或命令本身未安装恢复模式下原生命令均存在多为路径问题解决方案使用命令的绝对路径替代直接调用脚本中已默认适配手动修改时参考date→/bin/datetar→/usr/bin/tarfind→/usr/bin/findcp→/bin/cp验证方法输入which 命令名如which tar可查看命令的绝对路径。问题3打包目录时报错「No space left on device」原因备份磁盘可用空间不足无法存储打包后的压缩文件解决方案优先分批备份删除脚本中SOURCE_DIRS数组里的大型目录如docker/k8s先备份小型目录清理磁盘后再备份大型目录清理备份磁盘删除磁盘中无用的文件释放至少2GB以上可用空间更换大容量备份磁盘换用更大容量的外接磁盘重新预置脚本并执行。问题4报错「Permission denied」权限不足原因备份磁盘为只读格式如NTFSmacOS默认不支持NTFS写入或待备份目录未解锁系统盘解决方案备份磁盘问题更换为APFS/ExFAT格式的磁盘可在正常开机状态下通过「磁盘工具」格式化系统盘解锁问题在「磁盘工具」中选中系统盘如Macintosh HD点击「解锁」输入Mac登录密码确保系统盘挂载为可写模式。问题5脚本执行无响应无日志输出原因正在处理大型文件/目录如docker镜像tar打包需要大量时间恢复模式终端无实时进度条解决方案耐心等待不要中断脚本执行可通过「磁盘工具」查看备份磁盘的空间使用情况是否在持续占用验证脚本运行状态新开一个终端窗口输入ps aux | grep backup_final.sh确认脚本进程是否在运行后续优化分批备份大型目录避免单次处理过大文件。七、总结本文的备份脚本完全适配macOS恢复模式的bash 3.2环境解决了命令缺失、语法限制、无复制粘贴等核心痛点同时提供了详细的「提前预置脚本」实操流程和常见问题排查指南。无论是系统故障后的应急备份还是日常恢复模式下的文件迁移都能通过该脚本高效、安全地完成任务备份结果保留原目录层级无同名冲突便于后续系统恢复后的文件还原。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询