2017-07-18 3 views
-1

Ich habe einen Prozess, der Daten (ssh-Verbindung) streamt und ich möchte seine Ausgabe auf einen Dateinamen umleiten, der auf dem aktuellen Datum basiert.Wie werden gestreamte Daten in datenbasierte Dateien umgeleitet?

Das Problem ist, dass ich die Datei um Mitternacht "drehen" möchte, so würde ich mit einer Datei für jeden Tag der Stream-Protokollierung enden.

Kann ich das nur in bash? Wie?

Idealerweise sollte die Rotation ohne Unterbrechung der Zeilenumbrüche erfolgen.

+0

Was meinen Sie mit "ohne Zeilenumbrüche zu brechen"? – janos

+0

@janos Wenn Sie eine Zeile um 23:59:59 erhalten, möchten Sie vielleicht, dass sie in das aktuelle Tag-Protokoll geschrieben wird und den neuen Tag der nächsten Zeile beginnt, anstatt eine einzelne Zeile in zwei Dateien zu verteilen. – sorin

+0

Sie wollen also * Zeilen * nicht brechen. Bedeutet das auch, dass wir Zeile für Zeile aus dem Stream lesen können? (im Gegensatz zum byteweisen Lesen) – janos

Antwort

0

Sie könnten zeilenweise Zeile stdin lesen und an eine Datei anhängen, deren Name vom Datum zum Zeitpunkt des Lesens der Zeile abhängt.

while IFS= read -r line; do 
    log=log.$(date +%F) 
    echo "$line" >> "$log" 
done 
Verwandte Themen