You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:36:22