{"id":948,"date":"2013-03-18T22:44:17","date_gmt":"2013-03-18T21:44:17","guid":{"rendered":"http:\/\/www.butschek.de\/?p=948"},"modified":"2013-03-18T22:45:09","modified_gmt":"2013-03-18T21:45:09","slug":"rettet-das-datum","status":"publish","type":"post","link":"https:\/\/www.butschek.de\/2013\/03\/18\/rettet-das-datum\/","title":{"rendered":"Rettet das Datum!"},"content":{"rendered":"
Das kleine Kommando ‚date‘ der Linux-Shell wird oft m\u00e4chtig untersch\u00e4tzt. Man kann das Ausgabeformat setzen und sogar das Datum relativ zum heutigen Tag bestimmen. Hierf\u00fcr gibt es viele Anwendungsf\u00e4lle:<\/p>\n
# Datum ausgeben\r\ndate\r\nMon Mar 18 20:00:00 CET 2013<\/pre>\n# Das Datum von gestern\r\ndate -d \"yesterday\"\r\nSun Mar 17 20:00:00 CET 2013<\/pre>\n# Das Datum von vor 2 Tagen\r\ndate -d \"2 days ago\"\r\nSat Mar 16 20:00:00 CET 2013<\/pre>\n# Das Datum im ISO-Format\r\ndate +\"%Y-%m-%d\"\r\n2013-03-18<\/pre>\nHier nun eine Kombination daraus:<\/p>\n
# Das Datum von gestern im ISO-Format\r\ndate +\"%Y-%m-%d\" -d \"yesterday\"\r\n2013-03-17<\/pre>\nNun erzeugen wir einen Dateinamen:<\/p>\n
date +\"something-%Y-%m-%d.log\" -d \"yesterday\"\r\nsomething-2013-03-17.log<\/pre>\nWenn wir den Namen in einer Variable ben\u00f6tigen:<\/p>\n
FILENAME=$(date +\"something-%Y-%m-%d.log\" -d \"yesterday\")\r\necho \"$FILENAME\"<\/pre>\nEin anderer Anwenungsfall: Bestimmen wir die Zeit zwischen 2 Zeitpunkten:<\/p>\n
START=$(date \"+%s\")\r\n(do something)\r\nENDE=$(date \"+%s\")\r\nlet \"DIFF = $ENDE - $START\"\r\necho \"$DIFF Sekunden\"<\/pre>\nNun erhalten wir die Zeit-Differenz in Sekunden. Aber was sagt uns schon 2800 Sekunden? Auch hier kann date helfen, die Zeit umzurechnen:<\/p>\n
date -d \"00:00:00 $DIFF seconds\" \"+%H:%M:%S\"\r\n00:46:40<\/pre>\nDas obige Script lief also 46 Minuten und 40 Sekunden. So l\u00e4\u00dft sich dem n\u00e4chtlichen Backup-Script schnell beibringen, wie es seine Laufzeit auszugeben hat.<\/p>\n
Noch ein Trick: Mit folgendem Befehl kann man die 3 Variablen $DAY, $MONTH und $YEAR in einer Zeile setzen:<\/p>\n
eval $(date \"+DAY=%d; MONT=%m; YEAR=%Y\")<\/pre>\nNun l\u00e4\u00dft sich mit ‚echo $YEAR‘, ‚echo $MONT‘ oder ‚echo $DAY‘ das Datum im Script abfragen.<\/p>\n
Ach ja, wie alt bin ich eigentlich?<\/p>\n
BIRTHDAY=\"1975-01-10\"\r\n\r\nBDAY_SEC=$(date \"+%s\" -d \"$BIRTHDAY\")\r\nNOW_SEC=$(date \"+%s\")\r\n\r\nlet \"DIFF_SEC = $NOW_SEC - $BDAY_SEC\"\r\necho \"Alter: $DIFF_SEC Sekunden\"\r\n\r\nlet \"DIFF_DAYS = $DIFF_SEC \/ 60 \/ 60 \/ 24\"\r\necho \"Alter: $DIFF_DAYS Tage\"<\/pre>\nEs gibt so viele Anwendungsf\u00e4lle. Also, rettet das Datum! :-)<\/p>\n