macOS 如何使用 Shell 脚本自动化备份指定目录到移动硬盘

作者:袖梨 2026-08-11

直接用Shell脚本实现移动硬盘备份,核心是复制+时间标记+安全判断:先确认硬盘挂载与写权限,再用rsync增量备份并加时间戳,最后通过launchd定时执行,并在脚本开头校验挂载状态和剩余空间。

直接用 Shell 脚本把指定目录备份到移动硬盘,核心是“复制 + 时间标记 + 安全判断”,不需要第三方工具,系统自带 rsync 就足够可靠。

确认移动硬盘已正确挂载并可写

插入移动硬盘后,先检查它是否被系统识别且有写入权限:

  1. 打开终端,运行 ls /Volumes,确认你的硬盘名称(比如叫 BackupDisk)出现在列表里
  2. 测试能否创建文件:touch /Volumes/BackupDisk/test.tmp && rm /Volumes/BackupDisk/test.tmp,没报错说明可写
  3. 如果提示“Permission denied”,右键硬盘 → “显示简介” → 检查“共享与权限”里你的账户是否有“读与写”

用 rsync 写一个带时间戳的增量备份脚本

rsynccp 更适合备份:跳过未改动的文件、保留权限和符号链接、支持排除规则。下面是一个实用模板:

  1. 新建脚本文件,例如 ~/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/"

  1. 保存后赋予执行权限:chmod +x ~/backup.sh
  2. 运行一次测试:~/backup.sh,观察 /Volumes/BackupDisk/Backups/ 下是否生成带时间戳的新文件夹

设置定时自动执行(每天凌晨2点)

用系统自带的 launchd 实现静默定时运行,比 crontab 更兼容新版 macOS:

  1. 新建配置文件:~/Library/LaunchAgents/com.user.backup.plist
  2. 内容示例(注意把 UserName 替换为你自己的用户名):
<?xml version="1.0" encoding="UTF-8"?>Labelcom.user.backupProgramArguments/Users/UserName/backup.shStartCalendarIntervalHour2Minute0RunAtLoad
  1. 加载任务:launchctl load ~/Library/LaunchAgents/com.user.backup.plist
  2. 立即试运行(不等凌晨):launchctl start com.user.backup
  3. 查看日志是否成功:log show --predicate 'subsystem == "com.user.backup"' --last 1h

加一层安全保护:备份前校验硬盘状态

避免移动硬盘意外断开导致备份中断或损坏,可在脚本开头加入检测逻辑:

  1. backup.sh 开头插入:
# 检查硬盘是否挂载且空间充足(至少预留5GB)if ! mount | grep -q "/Volumes/BackupDisk"; thenecho "ERROR: Backup disk not mounted" >&2exit 1fi

AVAIL=$(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

  1. 这样脚本会在硬盘未连接或空间不足时直接退出,不覆盖旧备份也不报错中断

相关文章

精彩推荐