2013-02-15 3 views
5

ich einen Cron-Job haben, der alle 30 Minuten fährt, um Log-Dateien mit Zeitstempel wie folgt zu erzeugen:Shell-Skript Ordner täglich mit Zeitstempel zu erstellen und schieben Zeitstempel generierten Protokolle

test20130215100531.log, 
test20130215102031.log 

würde ich Ich mag es, jeden Tag einen Ordner mit dem Datums-/Zeitstempel zu erstellen und die Protokolldateien beim Generieren in den entsprechenden Datumsordner zu verschieben.

Ich muss dies auf AIX-Server mit bash erreichen.

+0

Was ist mit einem cronjob, der das Verzeichnis um 00.00 jeden Abend schafft? Ändern Sie dann den tatsächlichen Cronjob, um Dateien in dieses Verzeichnis zu verschieben. – fedorqui

+0

Ich würde 'mkdir -p' empfehlen, um jedes Mal ein fehlendes Verzeichnis zu erstellen, ohne es zu beschweren, wenn es bereits existiert. Was passiert, wenn der Job 00:00 aus irgendeinem Grund nicht ausgeführt werden kann (System ist ausgefallen)? Wollen wir deshalb alle täglichen Jobs abbrechen? –

+0

Ja, Sie haben Recht. Ich bevorzuge deine Wahl. – fedorqui

Antwort

8

für einen Skript suchen Sie so vielleicht:

#!/bin/bash 

shopt -s nullglob # this line is so that it does not compain when no logfiles are found 
for filename in test*.log; do # Files considered are the ones startign with test and ending in .log 
    foldername=$(echo "$filename" | awk '{print (substr($0, 5, 8));}'); # The foldername is characters 5 to 13 from the filename (if they exist) 
    mkdir -p "$foldername" # -p so that we dont get "folder exists" warning 
    mv "$filename" "$foldername" 
    echo "$filename $foldername" ; 
done 

ich mit Ihrer Probe nur getestet, so eine richtige Prüfung, bevor in einem Verzeichnis verwenden, die wichtigen Sachen enthält.

bearbeiten in Reaktion auf die Kommentare:

ändern Original-Skript dazu:

foldername=$(date +%Y%m%d) 
mkdir -p /home/app/logs/"$foldername" 
sh sample.sh > /home/app/logs/"$foldername"/test$(date +%Y%m%d%H%M%S).log 

Oder es wird das Verzeichnis woanders geschaffen, nur dies tun:

sh sample.sh > /home/app/logs/$(date +%Y%m%d)/test$(date +%Y%m%d%H%M%S).log 
+0

Vielen Dank !! Wie wäre das, wenn ich ein Verzeichnis nur einmal am Tag erstellen und Protokolle für denselben Tag in das Verzeichnis schreiben kann? Gerade jetzt .. Ich formiere die Protokolle durch ein Skript, das an einem Ort mit Zeitstempel platziert wird. – user1746666

+0

Können Sie den Teil Ihres Skripts posten, der die Protokolldatei mit dem Zeitstempel erstellt? Es ist einfacher, davon zu arbeiten. _ (Wenn Sie Ihre Frage bearbeiten, hinterlassen Sie hier auch einen Kommentar, damit ich benachrichtigt werde) _ – user000001

+0

// mache ich einige Konfigurations-Sachen hier, dann führe ein anderes Skript aus, um die Datei wie folgt zu erstellen. sh sample.sh>/home/app/logs/test $ (datum +% Y% m% d% H% M% S) .log Das oben genannte läuft alle 30 Minuten, was 48 Logs pro Tag generieren würde – user1746666