Time Machine-Fortschritt über die Befehlszeile

Die Time Machine -Systemsteuerung gibt Auskunft über laufende Backups. Zum Beispiel

Geben Sie hier die Bildbeschreibung ein

Gibt es eine Möglichkeit, die Informationen über die Befehlszeile abzurufen?

Antworten (5)

Während die Sicherung läuft, können detaillierte Informationen gewonnen werden

tmutil status

was so etwas zurückgeben sollte:

Backup session status:
{
    BackupPhase = Copying;
    ClientID = "com.apple.backupd";
    DateOfStateChange = "2014-12-18 14:14:21 +0000";
    DestinationID = "B4AF88-5AD5-49BE-B254-650B44E20499";
    DestinationMountPoint = "/Volumes/TimeMachine";
    Percent = "0.852581430477103";
    Progress =     {
        TimeRemaining = 0;
        "_raw_totalBytes" = 38596759;
        bytes = 36563200;
        files = 480;
        totalBytes = 42456434;
        totalFiles = 480;
    };
    Running = 1;
    Stopping = 0;
    "_raw_Percent" = "0.9473127005301144";
}

Wenn Sie sich nur für den Prozentsatz interessieren, versuchen Sie Folgendes (sieht hässlich aus, funktioniert nur, wenn ein Prozentsatz angezeigt werden soll):

tmutil status | awk '/_raw_Percent/ {print $3}' | grep -o '[0-9].[0-9]\+\(e-[0-9]\+\)\?' | awk '{print $1*100}'
In der Manpage habe ich das nicht gefunden. Woher hast du dieses Verb für tmutil?
@jsejcksn Um ehrlich zu sein, weiß ich nicht mehr, wo ich davon erfahren habe status, dass das Laufen tmutil help statusjetzt zurückkehrt *** status is a private verb. ***; warum das so ist und vor allem ob das vor zwei jahren noch so war, weiß ich nicht :D
Welches Format haben die Daten von tmutil? Es ist nicht ganz JSON. Ist es eine Art C-Objekt-Dump?
JSON-Dateien sind etwas spröde. Die Verwendung eines Tools jq, das JSON versteht, um Informationen zu extrahieren, ist möglicherweise ein besserer Ansatz.
@ThorbjørnRavnAndersen sicher, aber das ist kein gültiger json ;-)
@asmus. Ja. Ich brauche eine Brille.

So erhalten Sie nur den Prozentwert:

tmutil status | LC_NUMERIC="C" awk -F'"' '/_raw_Percent/ {print $4 * 100}'

Ich habe es geschafft, aus der akzeptierten Antwort ein einfaches Skript zu erstellen .

tmstatus () {
  eval $(tmutil status | grep -E '[^}];$' | perl -p -e 's/^\s+[\"]*//g;' -e 's/[\"]*\s+\=\s+/=/g') || (echo "Something get wrong..." && return 1)

  if [[ $Running -eq 1 ]]
  then
    export LC_NUMERIC="en_US.UTF-8"
    [[ $BackupPhase == "Copying" ]] && Percent=$(printf '%0.2f%%' `bc <<< $Percent*100`) && echo "${DateOfStateChange} ${BackupPhase} backup to ${DestinationMountPoint}: ${totalFiles} files - ${Percent} (~$((${TimeRemaining:-0}/60)) min." || echo "${DateOfStateChange} ${BackupPhase} (Destination ${DestinationID})."
  else
    echo "TimeMachine backup is not running."
  fi
}

Vielleicht etwas komplizierter, aber auch praktischer für die Verarbeitung, schreibt der folgende Befehl den Fortschrittsstatus in eine Plist-Datei und konvertiert sie in json:

tmutil status | grep -v 'Backup session status' > a.plist; plutil -convert json a.plist

Json kann einfacher analysiert werden, um verschiedene Informationen zu extrahieren.

Ich habe das sehr hilfreiche Skript von @Atika verwendet, bekam aber manchmal Fehler wie

bash: 26520.80484282512/60: syntax error: invalid arithmetic operator (error token is ".80484282512/60")

Also habe ich eine kleine Änderung vorgenommen, um diese Divisionsoperation an sie weiterzugeben, bcund jetzt funktioniert sie zuverlässig (Vorbehalt: für mich!):

Vor:

(~$((${TimeRemaining:-0}/60)) min."

Nach:

(~$(bc <<< ${TimeRemaining:-0}/60) min.)

Aktualisiertes Skript:

tmstatus () {
  eval $(tmutil status | grep -E '[^}];$' | perl -p -e 's/^\s+[\"]*//g;' -e 's/[\"]*\s+\=\s+/=/g') || (echo "Something get wrong..." && return 1)

if [[ $Running -eq 1 ]]
then
  export LC_NUMERIC="en_US.UTF-8"
  [[ $BackupPhase == "Copying" ]] && Percent=$(printf '%0.2f%%' $(bc <<< $Percent*100)) && echo "${DateOfStateChange} ${BackupPhase} backup to ${DestinationMountPoint}: ${totalFiles} files - ${Percent} (~$(bc <<< ${TimeRemaining:-0}/60) min.)" || echo "${DateOfStateChange} ${BackupPhase} (Destination ${DestinationID})."
else
  echo "TimeMachine backup is not running."
fi
}