手動清除time machine舊備份

日期:2014/08/26  分類:MACOS   

最近覺得我的time capsule空間有越來越小的趨勢
是時候來清理一下了
其實如果機器運作正常,很老的備份基本上是沒有存在的必要
比如說一年多前那種,那種你也不太可能再把它撈回來用了
所以不如把它清掉吧

我這邊寫的方法是把備份放在time capsule (外接硬碟也通用)
但是如果你是備份在本機端的,我就不確定了,你可能要自己試試看
我只會一個指令把本機端的備份全砍了,那就是“停用本機備份” XD

 sudo tmutil disablelocal 

重開機之後,你的所有本機備份都會被刪光光
如果備份是在外部
首先先來看一下備份有多少

 sudo tmutil listbackups 

這個指令執行下去可以順便把備份磁碟掛上來
你可以下df看一下,會有一個/Volumes/Time Machine Backups的磁區
當然你要先連得到time capsule
外接硬碟的話也要先把硬碟接上去 (不然是在做身體健康的嗎)
如果你的備份很多,跟我一樣一年半多了,那這個指令可能會跑一下子
結果出來你會發現一堆資料夾,他會以日期排序
就選你想殺的殺掉吧
像我是一次把2013年的全殺了 (注意:會砍超久)

 sudo tmutil delete "資料夾" 

以下是我刪除的截圖
可以看到2013年四月到現在都還在
每個備份都大概1GB~2GB,累積起來也是很恐怖的
螢幕快照 2014-08-25 23.45.40

如果你怕做錯,下面有個小script,可以幫你直接刪掉最老的一個備份
缺點就是每次只能刪一個備份,對上面指令不熟就一個一個慢慢來吧
如果你執行這個程式都不會…很簡單
把下面程式整個copy起來,到一個文字擋貼上
假設存檔成clean.sh 存在哪隨便你,自己找得到就好

#!/bin/bash
COMPUTER_NAME=$(/usr/sbin/scutil --get ComputerName)
NBACKUPS=$(/usr/bin/tmutil listbackups |
  /usr/bin/grep "$COMPUTER_NAME" |
  /usr/bin/wc -l)
OLDEST_BACKUP=$(/usr/bin/tmutil listbackups |
  /usr/bin/grep "$COMPUTER_NAME" |
  /usr/bin/head -n1)
LATEST_BACKUP=$(/usr/bin/tmutil latestbackup)
echo Latest backup: $LATEST_BACKUP
if [[ -n "$LATEST_BACKUP" && "$LATEST_BACKUP" != "$OLDEST_BACKUP" ]]
then
 echo -n "$NBACKUPS backups. Delete oldest: ${OLDEST_BACKUP##*/} [y/N]? "
read answer
 case $answer in
  y*)
echo Running: /usr/bin/sudo /usr/bin/tmutil delete "$OLDEST_BACKUP"
/usr/bin/sudo time /usr/bin/tmutil delete "$OLDEST_BACKUP"
;;
*)
 echo No change
 ;;
 esac
 else
 echo "No backup available for deletion"
 fi

然後打開終端機,輸入

 sudo sh clean.sh 

跑完它會列出你最老的備份,問你yes or no
打個y,就開始刪除了

刪除備份真的會做很久,最好在這時候先把自動備份停掉
不然又要刪備份,又要做備份
硬碟會受不了,除了超慢之外,壽命也會減少

Last Modified: 2014/8/27 09:35

3 thoughts on “手動清除time machine舊備份

  1. 胖亨利

    自動幫你刪,僅保留最新的,不用ㄧ個一個按y喲

    #!/bin/bash

    isLoop=true

    while [ isLoop ]

    do

    COMPUTER_NAME=$(/usr/sbin/scutil –get ComputerName)

    NBACKUPS=$(/usr/bin/tmutil listbackups |

    /usr/bin/grep “$COMPUTER_NAME” |

    /usr/bin/wc -l)

    OLDEST_BACKUP=$(/usr/bin/tmutil listbackups |

    /usr/bin/grep “$COMPUTER_NAME” |

    /usr/bin/head -n1)

    LATEST_BACKUP=$(/usr/bin/tmutil latestbackup)

    echo Latest backup: $LATEST_BACKUP

    if [[ -n “$LATEST_BACKUP” && “$LATEST_BACKUP” != “$OLDEST_BACKUP” ]]

    then

    echo Running: /usr/bin/sudo /usr/bin/tmutil delete “$OLDEST_BACKUP”

    /usr/bin/sudo time /usr/bin/tmutil delete “$OLDEST_BACKUP”

    else

    isLoop=false

    echo “No backup available for deletion”

    break

    fi

    done

    Reply
    1. tommyhsu

      這方法也不錯 我有做過一遍 但是跑超久的 久到我以為他當機了 XD

      Reply

留言

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料