Wie fügt man Datum und Uhrzeit in einen Dateinamen ein?

23

Ich versuche einen Befehl auszuführen und möchte das Datum und die Uhrzeit in den Namen der Ausgabedatei einfügen.

Hier ist ein Beispielbefehl, den ich ausführen möchte.

md5sum /etc/mtab > 2016_4_25_10_30_AM.log

Das Datums- und Uhrzeitformat kann bei Unterstrichen beliebig sinnvoll sein. Auch UTC, wenn AM und PM nicht verwendet werden können.

visk
quelle
Wenn nicht Bash, welche Shell verwenden Sie dann?
Ryan
Oh, es ist bash ... ich meinte bash script *
visc
Sie leiten nicht weiter, Sie leiten um. Und die Frage wäre dieselbe, wenn Sie nicht umleiten würden. Titel wird aktualisiert.
Mikel

Antworten:

46

Wenn Sie die aktuelle Datums- und Uhrzeitangabe als Dateinamen verwenden möchten, können Sie die Befehlsersetzung verwenden dateund ausführen .

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

Dies führt dazu, dass die Datei 2016_04_25_10_30_AM.log(mit der aktuellen Datums- und Uhrzeitangabe) mit dem MD5-Hashwert /etc/mtabals Inhalt erstellt wird.

Bitte beachten Sie, dass Dateinamen mit Zeitstempeln im 12-Stunden-Format möglicherweise nicht so nach Namen sortiert werden, wie Sie es möchten. Sie können dieses Problem vermeiden, indem Sie stattdessen Zeitstempel im 24-Stunden-Format verwenden.

Wenn Sie dieses Datumsformat nicht verwenden müssen, können Sie ein ISO 8601-konformes Datums- / Uhrzeitformat verwenden. Einige Beispiele zum Generieren gültiger ISO 8601-Datums- / Uhrzeitdarstellungen:

 $ 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

Wenn Sie sicherere Dateinamen möchten (z. B. aus Gründen der Windows-Kompatibilität), können Sie die Doppelpunkte im Zeitabschnitt weglassen.

Bitte beachten Sie, dass die obigen Beispiele alle die lokale Systemzeit annehmen. Wenn Sie eine Zeitdarstellung benötigen, die in allen Zeitzonen konsistent ist, sollten Sie einen Zeitzonenversatz oder eine UTC-Zeit angeben. Sie können einen ISO 8601-kompatiblen Zeitzonenversatz erhalten, indem Sie "% z" im Formatteil Ihres dateAnrufs wie folgt verwenden:

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

Sie können die UTC-Zeit in Ihrem dateAufruf abrufen, indem Sie das -uFlag angeben und "Z" am Ende der Datums- / Uhrzeitzeichenfolge hinzufügen, um anzugeben, dass die Zeit wie folgt in UTC angegeben ist:

 $ date -u +"%FT%H%MZ"
 2016-04-25T1430Z
Ryan
quelle
@Mikel Haben Sie und ich uns gegenseitig überarbeitet?
Ryan
Möglicherweise. Ich habe gerade "subshell" in "command substitution" geändert. Ich bin jetzt fertig, also bitte nach Belieben bearbeiten.
Mikel
@Mikel Kein Problem. Ich habe meine Bearbeitung jetzt erneut übermittelt.
Ryan
@Mikel Keine Sorge! Ich hätte es sowieso als "Befehlsersetzung" bezeichnen sollen. Vielen Dank für die Verbesserung der Antwort!
Ryan
3
Der Unterstrich ist ein seltsamer Charakter. Es wird bevorzugt, ISO-8601 wie $(date +%FT%T)das zu verwenden, was geben wird 2016-04-25T10:30:00.
hschou