So löschen (tmutil delete) Sie alle alten Backups von TimeMachine – behalten Sie nur das aktuelle vollständige Backup

So löschen Sie (mit CLI tmutil delete) alle alten Backups von TimeMachine. Ich möchte nur die aktuelle Sicherung behalten.

Das möchte ich eintragen crontab.

Gefunden , wie man alte Sicherungen von Time Machine auf dem Mac löscht

sudo tmutil delete /Volumes/Time Machine Backups/Backups.backupdb/MacBook\ Pro/2015-07-13-150021/

Ich mag es nicht, Zeitstempel anzugeben. Ich möchte nur eine aktuelle vollständige Sicherung haben. Dies bedeutet, gelöschte Dateien und Versionen von der Sicherungsfestplatte zu entfernen.

Wenn Sie dies oft tun möchten, denke ich, dass Sie das falsche Tool verwenden, versuchen Sie es mit Carbon Copy Cloner oder Superduper, die darauf ausgelegt sind, nur eine Kopie zu haben
Aber beide kosten weniger (und nicht viel) als die Probleme eines schlechten Backups oder die Zeit, die Sie damit verbracht haben - aber schauen Sie sich kostenlos rsync an
Ja, ich stimme zu: Wenn man sich mit TM anlegt, geht es normalerweise schief. Wenn Sie nur eine Kopie möchten, verwenden Sie ein anderes Tool. Außerdem: Eine Kopie ist nicht wirklich ein Backup. Wie stellen Sie eine gelöschte Datei wieder her, wenn Ihr Backup nur eine Kopie dessen ist, was Sie derzeit haben?

Antworten (2)

Ab macOS Big Sur 11.2.3+ – und gemäß dem Update – müssen Sie den Mount-Point-Datenträger und den Zeitstempel jedes Backups mithilfe von bzw. Flags man tmutilangeben . Für die akzeptierte Antwort ist also die folgende Optimierung erforderlich:-d-t

# assuming you have the backup disk connected & root privileges:
# get the latest backup to exclude from deletion
latest=$(sudo tmutil latestbackup)
# the 4th line after the last space from `tmutil destinationinfo` output
# contains the mount disk name
mountpoint=$(tmutil destinationinfo | sed '4q;d' | sed 's/.* //')
echo "latest is $latest"
# delete all the backups excluding the latest
backups=$(sudo tmutil listbackups)
echo $backups | while read timestamp; do
    if [[ "$timestamp" != "$(basename $latest)" ]]; then
        echo sudo tmutil delete -d $mountpoint -t $timestamp
    fi
done

# if you want to keep the last, say, 3 backups, pipe "sed '$d'" 3-1=2 times:
backups=$(sudo tmutil listbackups | sed '$d' | sed '$d')

So sollte es aussehen sudo tmutil delete -d /Volumes/TimeMachineBackups -t 2021-04-10-004103.

MacOS Big Sur 11.2.3 hier. Für diesen Befehl: sudo tmutil delete -d 2020-12-16 -t 151046.backupIch erhalte diesen Fehler:151046.backup: Invalid argument (error 22)
@bartektartanus was bekommst du mit tmutil listbackups?. Bei mir ist es JJJJ-MM-TT-hhmmss. In diesem Fall möchten Sie vielleicht das .backupSuffix entfernen. Ich habe eine Bearbeitung hinzugefügt.
Das wird nicht funktionieren. man tmutilsagt: delete [-d backup_mount_point -t timestamp] [-p path]. Der Pfad gilt nur für hfs, aber Sie benötigen den Einhängepunkt sowie den Zeitstempel. Es gibt kein -d-Argument.
@Gilby danke für den Hinweis. Ich habe es gerade repariert.
Nein. Als ich es versuchte, musste es sein sudo tmutil delete -d /Volumes/.timemachine/<UUID>/<date-time>.backup -t <date-time>. Siehe meine Antwort auf apple.stackexchange.com/questions/407967/…
#!/bin/bash
latest=$(sudo tmutil latestbackup)
sudo tmutil listbackups | while read backup; do
    if [[ "$backup" != "$latest" ]]; then
        echo sudo tmutil delete "$backup"
    fi
done

Entfernen Sie das , echosobald Sie sicher sind, dass die Ausgabe korrekt ist.

Abhängig von der Größe dieser Sicherungen sudokann die von gewährte Nachfrist während der Ausführung ablaufen tmutil delete. Wahrscheinlich möchten Sie einfach sudo aus dem Skript entfernen und dieses Skript stattdessen mit sudo ausführen. Außerdem tmutil listbackupswerden die "neuesten" Backups nicht wirklich aufgelistet, zumindest nicht auf meinem System, sodass Ihr Skript effektiv ALLE Backups löscht.
@DanielSmedegaardBuus Gültiger Punkt zu sudo, ich verstehe die zweite Bemerkung jedoch nicht. Das Ziel ist, alle bis auf die neueste Sicherung zu löschen (die von zurückgegeben wird sudo tmutil latestbackup).
Mein Fehler, ich habe diesen Teil im Skript verpasst. XD Ich habe es manuell selbst gemacht.