Il comando `date`, uno strumento versatile disponibile nella shell Bash, presente in quasi tutte le distribuzioni Linux e in macOS, consente di manipolare e visualizzare la data e l’ora dalla riga di comando. Questo tutorial illustra come utilizzare questo comando per controllare la data, formattarla e impiegarla in script shell per scopi che vanno oltre la semplice visualizzazione.
Per cominciare, eseguendo semplicemente il comando `date` nel terminale, si otterrà una visualizzazione dell’ora e della data corrente, formattata secondo le impostazioni predefinite del sistema:
date
Tuttavia, la formattazione di default potrebbe non essere ideale per tutti. L’ordine con cui vengono presentati i vari elementi, ad esempio, con l’anno alla fine, potrebbe risultare poco intuitivo. Fortunatamente, il comando `date` offre una vasta gamma di opzioni per personalizzare la formattazione dell’output. Sono disponibili oltre 40 opzioni diverse che consentono di presentare data e ora esattamente nel formato desiderato.
Per specificare una qualsiasi di queste opzioni, è necessario digitare il comando `date`, uno spazio, il simbolo `+` seguito dall’opzione desiderata, che include a sua volta il simbolo di percentuale `%`. Ad esempio, l’opzione `%c` permette di stampare la data e l’ora nel formato locale, conforme alla lingua e alle convenzioni del paese definite durante l’installazione del sistema operativo. Queste impostazioni locali influenzano anche aspetti come il simbolo della valuta, le dimensioni della carta e il fuso orario.
date +%c
Con questa opzione, l’anno viene posizionato in una posizione più logica e naturale all’interno dell’output.
È possibile combinare più opzioni insieme, creando una cosiddetta “stringa di formato”. Per visualizzare, ad esempio, il nome del giorno (%A), il giorno del mese (%d) e il nome del mese (%B), si può utilizzare il seguente comando:
date +%A%d%B
Sebbene questo comando funzioni, il risultato non è esteticamente gradevole. Per migliorare la leggibilità, è possibile includere spazi nella stringa di formato, a condizione di racchiudere l’intera stringa tra virgolette. Si noti che il simbolo `+` rimane al di fuori delle virgolette.
date +"%A %d %B"
È anche possibile includere del testo personalizzato all’interno della stringa di formato:
date +"Oggi è: %A %d %B"
Esplorare la pagina man del comando `date` per trovare l’opzione desiderata può diventare rapidamente tedioso. Per semplificare la consultazione, le opzioni sono state suddivise in gruppi.
Opzioni per visualizzare la data e l’ora
%c: Visualizza data e ora nel formato locale, inclusivo del fuso orario.
Opzioni per visualizzare la data
%D: Visualizza la data nel formato mm/gg/aa.
%F: Visualizza la data nel formato aaaa-mm-gg.
%x: Visualizza la data nel formato locale.
Opzioni per visualizzare il giorno
%a: Visualizza il nome del giorno in forma abbreviata (lun, mar, mer, ecc.).
%A: Visualizza il nome completo del giorno (lunedì, martedì, mercoledì, ecc.).
%u: Visualizza il numero del giorno della settimana (lunedì=1, martedì=2, mercoledì=3, ecc.).
%w: Visualizza il numero del giorno della settimana (domenica=0, lunedì=1, martedì=2, ecc.).
%d: Visualizza il giorno del mese, con uno zero iniziale (01, 02, …, 09) se necessario.
%e: Visualizza il giorno del mese, con uno spazio iniziale (“1”, “2”, …, “9”) se necessario.
%j: Visualizza il giorno dell’anno, con un massimo di due zeri iniziali, se necessario.
Opzioni per visualizzare la settimana
%U: Visualizza il numero della settimana dell’anno, considerando la domenica come primo giorno della settimana.
%V: Visualizza il numero della settimana ISO dell’anno, considerando il lunedì come primo giorno della settimana.
%W: Visualizza il numero della settimana dell’anno, considerando il lunedì come primo giorno della settimana.
Opzioni per visualizzare il mese
%b o %h: Visualizza il nome del mese abbreviato (gen, feb, mar, ecc.).
%B: Visualizza il nome completo del mese (gennaio, febbraio, marzo, ecc.).
%m: Visualizza il numero del mese, con uno zero iniziale se necessario (01, 02, 03, …, 12).
Opzioni per visualizzare l’anno
%C: Visualizza il secolo senza l’anno (ad es., 20 per il 2019).
%y: Visualizza l’anno con due cifre (ad es., 19 per il 2019).
%Y: Visualizza l’anno con quattro cifre.
Opzioni per visualizzare l’ora
%T: Visualizza l’ora nel formato HH:MM:SS.
%R: Visualizza l’ora e i minuti nel formato HH:MM (senza secondi), utilizzando l’orologio a 24 ore.
%r: Visualizza l’ora secondo le impostazioni locali, utilizzando l’orologio a 12 ore e l’indicatore AM o PM.
%X: Visualizza l’ora secondo le impostazioni locali, utilizzando l’orologio a 24 ore. Questa opzione, tuttavia, in alcuni casi potrebbe comportarsi in modo simile a `%r` (vedi output sottostante). Su sistemi configurati per le impostazioni locali del Regno Unito e GMT, si comporta invece come previsto, mostrando l’ora nel formato a 24 ore senza indicatore AM/PM.
Opzioni per visualizzare l’ora
%H: Visualizza l’ora nel formato 00, 01, 02, …, 23.
%I: Visualizza l’ora utilizzando l’orologio a 12 ore (00, 01, 02, …, 12), con uno zero iniziale se necessario.
Opzioni per visualizzare i minuti
%M: Visualizza i minuti (01, 02, 03, …, 59), con uno zero iniziale se necessario.
Opzioni per visualizzare i secondi
%s: Visualizza il numero di secondi trascorsi dal 1970-01-01 00:00:00 (l’inizio della Unix Epoch).
%S: Visualizza i secondi (01, 02, 03, …, 59), con uno zero iniziale se necessario.
%N: Visualizza i nanosecondi.
Opzioni per visualizzare le informazioni sul fuso orario
%z: Visualizza la differenza di fuso orario rispetto a UTC.
%:z: Visualizza la differenza di fuso orario rispetto a UTC, con il simbolo `:` tra le ore e i minuti.
%::z: Visualizza la differenza di fuso orario rispetto a UTC, con il simbolo `:` tra le ore, i minuti e i secondi.
%Z: Visualizza il nome alfabetico del fuso orario.
Opzioni relative alla formattazione
%p: Visualizza l’indicatore AM o PM in maiuscolo.
%P: Visualizza l’indicatore AM o PM in minuscolo. Si noti l’inversione: `p` minuscola fornisce output in maiuscolo, `P` maiuscola fornisce output in minuscolo.
%t: Visualizza un carattere di tabulazione.
%n: Visualizza una nuova riga.
Opzioni per modificare altre opzioni
Questi modificatori possono essere inseriti tra il simbolo `%` e la lettera dell’opzione per alterarne la visualizzazione. Ad esempio, `% -S` rimuove lo zero iniziale per i valori dei secondi a una sola cifra.
-: Un singolo trattino sopprime gli zeri iniziali per valori a una sola cifra.
_: Un singolo underscore aggiunge spazi iniziali per valori a una sola cifra.
0: Fornisce zeri iniziali per valori a una sola cifra.
^: Utilizza le maiuscole, se possibile (non tutte le opzioni rispettano questo modificatore).
#: Utilizza l’opposto del caso predefinito per l’opzione, se possibile (non tutte le opzioni rispettano questo modificatore).
Altri due utili trucchi
Per ottenere l’ora dell’ultima modifica di un file, è possibile utilizzare l’opzione `-r` (reference). Si noti che questa opzione utilizza un trattino singolo (-) invece del simbolo di percentuale `%` e non richiede il simbolo `+`. Per esempio, per conoscere l’ultima modifica del file `.bashrc` nella tua cartella home, puoi usare:
date -r .bashrc
La variabile `TZ` permette di modificare il fuso orario per la durata di un singolo comando:
TZ=GMT date +%c
Utilizzo della data negli script
Integrare il comando `date` all’interno di uno script Bash è estremamente semplice. Ad esempio, è possibile creare un file di testo (ad es., `gd.sh`) con il seguente contenuto:
#!/bin/bash TODAY=$(date +"Oggi è %A, %d del %B") TIMENOW=$(date +"L'ora locale è %r") TIME_UK=$(TZ=BST date +"L'ora nel Regno Unito è %r") echo $TODAY echo $TIMENOW echo $TIME_UK
Per rendere lo script eseguibile, occorre impostare i permessi con il comando:
chmod +x gd.sh
Lo script può essere eseguito con il comando:
./gd.sh
Il comando `date` può anche essere utilizzato per creare timestamp. Lo script seguente, ad esempio, crea una directory con il timestamp come nome e vi copia tutti i file di testo dalla cartella corrente, fornendo un’istantanea dei file nel tempo. È utile notare che questo non è un sistema di backup robusto, ma solo a scopo dimostrativo.
Si crei un file di testo chiamato `snapshot.sh` con il seguente contenuto:
#!/bin/bash # Ottieni la data e l'ora date_stamp=$(date +"%F-%H-%M-%S") # Crea una directory con quel nome mkdir "$date_stamp" # Copia i file dalla cartella corrente dentro cp *.txt "$date_stamp" # Finito, riporta e esci echo "File di testo copiati nella cartella: "$date_stamp
Per rendere lo script eseguibile, occorre impostare i permessi con il comando:
chmod +x snapshot.sh
Lo script può essere eseguito con:
./snapshot.sh
Al termine, verrà creata una directory il cui nome corrisponde alla data e all’ora di esecuzione dello script, contenente copie dei file di testo presenti nella cartella da cui è stato eseguito.
Con un po’ di creatività, anche il semplice comando `date` può essere utilizzato in modo produttivo e versatile.