In Linux come creare un file con un nome che è la data e l'ora correnti


12

Voglio fare un file il cui nome sarà una data e ora correnti. Posso creare un file con il touchcomando. Inoltre posso ottenere l'ora corrente con il datecomando. Quindi, penso, devo in qualche modo inoltrare il secondo comando al primo. Come posso fare ciò?

Risposte:


19

Utilizzare il valore restituito da un'espressione shell come argomento per touch:

touch $( date '+%Y-%m-%d_%H-%M-%S' )

Risultato: un file chiamato ad es 2012-03-11_14-33-53.

Questa risposta presuppone che tu stia utilizzando bash(è descritta nella mansezione Sostituzione dei comandi della pagina ), ma altre shell funzioneranno allo stesso modo o solo leggermente diverse.


@MdGao E descritto nella stessa sezione della pagina man. Preferisco la risposta che ho dato, ecco alcuni motivi
Daniel Beck

Ho rimosso il mio commento perché Markdown ha rotto i backtick. grazie per il link @DanielBeck
Mengdi Gao

2
@gasan Basta racchiuderlo tra "virgolette. Potete immaginare l'uscita di datesostituzione di quella parte della linea di comando, e touch Sun Mar 11 14:48:31 CET 2012creerebbe nome file Sun, Mare così via touch "Sun Mar 11 14:48:31 CET 2012"d'altra parte funziona bene (tranne che non sono sicuro di quanto bene i due punti funzionerà).
Daniel Beck

2
@gasan Le virgolette singole non funzionano perché non consentono la sostituzione dei comandi o qualsiasi altra interpretazione. Vedi le citazioni nel manuale di Bash.
slhck,

2
@gasan La differenza è che il contenuto delle virgolette singole non viene valutato. Provalo con echo "$HOME"e echo '$HOME'. Ecco perché ho suggerito l'uso di ".
Daniel Beck

0

Puoi usare un comando più semplice

touch $(date | tr ' ' '-')

Un po 'meno elegante e probabilmente meno portatile, ma, sì, funzionerà anche.
Scott,

OK, dato che so che stai leggendo questo, entrerò in qualche dettaglio in più: la risposta di Daniel dà un risultato in un formato noto e totalmente controllato. (1) L'output di in dategenere mostra il tempo come hh: mm: ss. La tua risposta si traduce in nomi di file contenenti due punti. Ciò potrebbe causare un errore nei file system basati su Windows. (2) L'output non elaborato proveniente da una semplice chiamata di datedipende dalla locale; cioè personalizzato per la lingua locale. Prova LANG=de_DE datee LANG=fr_FR dateper vedere alcuni esempi. ... (proseguendo)
Scott,

(Proseguendo) ... (2a) Pertanto, nell'evento (improbabile?) Che tu abbia mai cambiato la lingua sul tuo sistema, o dai il tuo script e una raccolta di file di dati dal tuo sistema a qualcuno il cui sistema è configurato per un lingua diversa, ci sarà una discrepanza. (Non sono sicuro che questo sarebbe un vero problema, ma sarebbe un problema estetico.) (2b) Non conosco nessun locale che lo fa, ma teoricamente potrebbe esserci un locale dove datescrivere la data come mm / gg / aa (o gg / mm / aa). ... (proseguendo)
Scott,

(Proseguendo) ... Se mai incontrassi un tale sistema, avresti nomi di file contenenti barre e questo causerebbe errori. (3) La risposta di Daniel dà un risultato in cui l'ordine lessicografico (cioè alfabetico), come prodotto da lso *, corrisponde all'ordine cronologico. Con la tua risposta, tutti i Frifile saranno all'inizio di qualsiasi elenco lessicograficamente ordinato Apre Augappariranno prima di tutti gli altri mesi.
Scott,
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.