最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
macOS 如何使用 Shell 脚本自动化备份指定目录到移动硬盘
时间:2026-08-11 08:36:49 编辑:袖梨 来源:一聚教程网
直接用Shell脚本实现移动硬盘备份,核心是复制+时间标记+安全判断:先确认硬盘挂载与写权限,再用rsync增量备份并加时间戳,最后通过launchd定时执行,并在脚本开头校验挂载状态和剩余空间。
直接用 Shell 脚本把指定目录备份到移动硬盘,核心是“复制 + 时间标记 + 安全判断”,不需要第三方工具,系统自带 rsync 就足够可靠。
确认移动硬盘已正确挂载并可写
插入移动硬盘后,先检查它是否被系统识别且有写入权限:
- 打开终端,运行
ls /Volumes,确认你的硬盘名称(比如叫BackupDisk)出现在列表里 - 测试能否创建文件:
touch /Volumes/BackupDisk/test.tmp && rm /Volumes/BackupDisk/test.tmp,没报错说明可写 - 如果提示“Permission denied”,右键硬盘 → “显示简介” → 检查“共享与权限”里你的账户是否有“读与写”
用 rsync 写一个带时间戳的增量备份脚本
rsync 比 cp 更适合备份:跳过未改动的文件、保留权限和符号链接、支持排除规则。下面是一个实用模板:
- 新建脚本文件,例如
~/backup.sh,内容如下:
#!/bin/bashSOURCE="/Users/yourname/Documents/project"DEST="/Volumes/BackupDisk/Backups"DATE=$(date +"%Y%m%d_%H%M")确保目标路径存在mkdir -p "$DEST"
执行同步,--delete 保持目标与源完全一致,-a 保留属性,--exclude 排除临时文件rsync -av --delete --exclude='*.tmp' --exclude='.DSStore' "$SOURCE/" "$DEST/project$DATE/"
- 保存后赋予执行权限:
chmod +x ~/backup.sh - 运行一次测试:
~/backup.sh,观察/Volumes/BackupDisk/Backups/下是否生成带时间戳的新文件夹
设置定时自动执行(每天凌晨2点)
用系统自带的 launchd 实现静默定时运行,比 crontab 更兼容新版 macOS:
- 新建配置文件:
~/Library/LaunchAgents/com.user.backup.plist - 内容示例(注意把
UserName替换为你自己的用户名):
Label com.user.backup ProgramArguments /Users/UserName/backup.sh StartCalendarInterval Hour 2 Minute 0 RunAtLoad
- 加载任务:
launchctl load ~/Library/LaunchAgents/com.user.backup.plist - 立即试运行(不等凌晨):
launchctl start com.user.backup - 查看日志是否成功:
log show --predicate 'subsystem == "com.user.backup"' --last 1h
加一层安全保护:备份前校验硬盘状态
避免移动硬盘意外断开导致备份中断或损坏,可在脚本开头加入检测逻辑:
- 在
backup.sh开头插入:
# 检查硬盘是否挂载且空间充足(至少预留5GB)if ! mount | grep -q "/Volumes/BackupDisk"; thenecho "ERROR: Backup disk not mounted" >&2exit 1fiAVAIL=$(df -k "/Volumes/BackupDisk" | tail -1 | awk '{print $4}') if [ "$AVAIL" -lt 5242880 ]; then# 小于5GB echo "ERROR: Less than 5GB free on backup disk" >&2 exit 1 fi
- 这样脚本会在硬盘未连接或空间不足时直接退出,不覆盖旧备份也不报错中断