Come si inseriscono la data e l'ora nel nome di un file?


23

Sto cercando di eseguire un comando e vorrei inserire la data e l'ora nel nome del file di output.

Ecco un comando di esempio che vorrei eseguire.

md5sum /etc/mtab > 2016_4_25_10_30_AM.log

Il formato dell'ora della data può essere sensato con i caratteri di sottolineatura. Anche UTC se non è possibile utilizzare AM e PM.


Se non Bash, quale shell stai usando?
Ryan,

Oh, è bash ... intendevo bash script *
visc

Non stai eseguendo il piping, stai reindirizzando. E la domanda sarebbe la stessa se non stavi reindirizzando. Aggiornamento del titolo.
Mikel,

Risposte:


46

Se si desidera utilizzare il datetime corrente come nome file, è possibile utilizzare datee comandare la sostituzione .

 $ md5sum /etc/mtab > "$(date +"%Y_%m_%d_%I_%M_%p").log"

Ciò comporta la 2016_04_25_10_30_AM.logcreazione del file (sebbene, con il datetime corrente) con l'hash md5 /etc/mtabcome contenuto.

Si noti che i nomi dei file che contengono i timestamp in formato 12 ore probabilmente non verranno ordinati per nome nel modo in cui si desidera che vengano ordinati. È possibile evitare questo problema utilizzando invece i timestamp in formato 24 ore.

Se non hai l'obbligo di utilizzare quel formato data specifico, potresti prendere in considerazione l'utilizzo di un formato data / ora conforme a ISO 8601. Alcuni esempi di come generare rappresentazioni datetime ISO 8601 valide includono:

 $ date +"%FT%T"
 2016-04-25T10:30:00

 $ date +"%FT%H%M%S"
 2016-04-25T103000

 $ date +"%FT%H%M"
 2016-04-25T1030

 $ date +"%Y%m%dT%H%M"
 20160425T1030

Se desideri nomi di file "più sicuri" (ad esempio, per compatibilità con Windows), puoi omettere i due punti dalla porzione temporale.

Tieni presente che tutti gli esempi sopra riportati presuppongono che l'ora del sistema locale. Se è necessaria una rappresentazione dell'ora coerente tra i fusi orari, è necessario specificare un offset del fuso orario o UTC. È possibile ottenere un offset del fuso orario conforme a ISO 8601 utilizzando "% z" nella parte del formato della datechiamata in questo modo:

 $ date +"%FT%H%M%z"
 2016-04-25T1030-0400

È possibile ottenere l'ora UTC nella datechiamata specificando il -uflag e aggiungendo "Z" alla fine della stringa datetime per indicare che l'ora è UTC in questo modo:

 $ date -u +"%FT%H%MZ"
 2016-04-25T1430Z

@Mikel Tu ed io abbiamo effettuato una modifica incrociata?
Ryan,

Possibilmente. Ho appena cambiato "subshell" in "sostituzione comando". Ho finito ora, quindi per favore modifica come preferisci.
Mikel,

@Mikel Nessun problema. Ho reinviato la mia modifica ora.
Ryan,

@Mikel Nessun problema! Avrei dovuto ricordarmi di chiamarlo comunque "sostituzione comando". Grazie per aver migliorato la risposta!
Ryan,

3
Underscore è un personaggio strano. Si preferisce usare ISO-8601 come quello $(date +%FT%T)che darà 2016-04-25T10:30:00.
hschou
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.