High Sierra系统中提取快照日期并编写自动删除脚本求助
提取High Sierra本地快照日期+自动删除完整方案
我来帮你搞定这个问题——之前用thinlocalsnapshots确实只是临时缩减空间,要彻底自动清理就得精准提取快照日期,再结合删除逻辑。下面一步步来:
1. 先搞懂快照的命名规则
High Sierra里本地快照的名称格式一般是:com.apple.TimeMachine.2018-02-15-123456.local,核心目标就是把中间的YYYY-MM-DD-XXXXXX格式日期抠出来。
2. 用正则快速提取日期
先执行命令列出所有本地快照:
tmutil listlocalsnapshots /
输出大概是这样:
com.apple.TimeMachine.2018-02-15-123456.local
com.apple.TimeMachine.2018-02-16-098765.local
接着用grep结合正则提取日期部分,这一步是关键:
tmutil listlocalsnapshots / | grep -Eo '[0-9]{4}-[0-9]{2}-[0-9]{2}-[0-9]{6}'
-E开启扩展正则,让我们能写更灵活的匹配规则-o只输出匹配到的内容,不会带多余的前缀后缀- 正则
[0-9]{4}-[0-9]{2}-[0-9]{2}-[0-9]{6}完美匹配你要的2018-02-##-######格式
3. 整合到你的删除脚本里
你已经有删除快照的基础脚本,把提取日期的逻辑加进去就行。比如下面这个完整的示例脚本,能批量删除所有本地快照(也可以改成只删指定日期之前的):
#!/bin/bash # 提取所有本地快照的日期字符串 snapshot_dates=$(tmutil listlocalsnapshots / | grep -Eo '[0-9]{4}-[0-9]{2}-[0-9]{2}-[0-9]{6}') # 遍历每个日期,执行删除操作 for date_str in $snapshot_dates; do echo "准备删除快照: com.apple.TimeMachine.${date_str}.local" # 这里要注意:tmutil deletelocalsnapshots 直接用日期字符串就能删,不用全名 tmutil deletelocalsnapshots "$date_str" done
小技巧:
tmutil deletelocalsnapshots命令支持直接传入日期部分(比如2018-02-15-123456),不用拼完整的快照名称,省了不少事。
4. 替代thinlocalsnapshots的长期方案
如果不想总用thinlocalsnapshots临时救急,可以试试这两个办法:
- 检查Time Machine的自动删除设置:High Sierra默认开启了自动删除旧快照,但可以通过
defaults write com.apple.TimeMachine AutoDeleteSnapshots -bool true强制开启(如果没开的话) - 定时运行删除脚本:用
launchd创建一个定时任务,比如每天凌晨自动清理7天前的快照,彻底自动化
5. 验证提取效果
先单独跑提取命令,确认能拿到正确的日期:
tmutil listlocalsnapshots / | grep -Eo '[0-9]{4}-[0-9]{2}-[0-9]{2}-[0-9]{6}'
如果输出的都是你要的2018-02-##-######格式,就说明正则没问题,可以放心整合到脚本里。
内容的提问来源于stack exchange,提问作者csiket715
相关产品推荐
相关产品推荐

