Ho caricato uno script bash come Gist sul mio account Github all'indirizzo print_osx_uptimes.sh che può aiutare a rispondere alla tua domanda , anche se non esattamente quello che è stato chiesto (che è stato più complicato).
Lo script interrogherà la funzione del registro di sistema Apple (ASL) per i messaggi di "chiusura". I valori del campo "Messaggio" contengono il tempo di funzionamento del sistema a partire dall'evento di chiusura, che probabilmente è ragionevolmente vicino alla domanda del poster originale.
Converte quindi i secondi di operatività in un formato più leggibile che mostra giorni, ore, minuti e secondi.
Testato su OS X 10.10.5, ma non vedo alcun motivo per cui non dovrebbe funzionare su nulla dal 10.7 in poi (probabilmente 10.6 pure).
Codice modificato per controllare anche i messaggi (duh) di "riavvio" e aggiorna l'output per mostrare il tipo di evento (ad esempio il nome del mittente) per ciascuno.
Output di esempio:
$ ./print_osx_uptimes.sh
Shutdown on date/time: Event Reported uptime of:
============================= ========= ===================================
Mon Jul 6 2015 10:32:21 EDT shutdown 1 days 11 hrs 30 min 15 secs
Thu Jul 16 2015 20:47:24 EDT reboot 1 days 22 hrs 15 min 46 secs
Thu Jul 16 2015 22:01:50 EDT shutdown 0 days 21 hrs 4 min 28 secs
Sun Jul 19 2015 02:10:34 EDT shutdown 2 days 16 hrs 35 min 35 secs
Tue Jul 21 2015 19:32:35 EDT shutdown 9 days 17 hrs 41 min 46 secs
Fri Jul 24 2015 20:35:05 EDT shutdown 9 days 7 hrs 55 min 38 secs
Sat Jul 25 2015 00:03:13 EDT shutdown 8 days 10 hrs 45 min 8 secs
Tue Jul 28 2015 09:16:47 EDT shutdown 5 days 21 hrs 20 min 57 secs
Thu Jul 30 2015 22:32:36 EDT shutdown 10 days 0 hrs 3 min 59 secs
Tue Aug 4 2015 01:37:32 EDT shutdown 7 days 4 hrs 24 min 35 secs
Fri Aug 14 2015 19:15:04 EDT reboot 5 days 22 hrs 42 min 1 secs
La carne del copione su Github Gist è:
#!/bin/bash
# https://gist.github.com/jps3/afc1e374b632e1ed1ebc
# function displaytime() is a modified form of that from:
# http://unix.stackexchange.com/a/27014
function displaytime {
local T=$1
local D=$((T/60/60/24))
local H=$((T/60/60%24))
local M=$((T/60%60))
local S=$((T%60))
printf '%5s days %2s hrs %2s min %2s secs' $D $H $M $S
}
function get_syslog_entries () {
syslog -d store \
-F '$(Sender) $(Message)' \
-k Sender Req '^(shutdown|reboot)$' \
-k Message Req "SHUTDOWN_TIME"
}
while read -a line; do
sender="${line[0]}"
log_entry_timestamp="$(date -j -f %s "${line[2]}" +"%a %b %e %Y %T %Z")"
uptime_timestamp="$(displaytime "${line[3]}")"
printf "%s %-8s %s\n" "${log_entry_timestamp}" "${sender}" "${uptime_timestamp}"
done < <(get_syslog_entries)
Spero che questo aiuti. Ho provato a ripulire lo script e rendere utili parti e commenti.