Lasse Tail warten, bis eine Datei existiert


25

tail -f bar/somefile.logwürde sofort fehlschlagen, wenn somefile.log nicht existiert. Wie kann ich den Schwanz auf unbestimmte Zeit warten lassen, bis diese Datei erstellt wurde (was in wenigen Augenblicken geschehen wird)?

Update: mit -Fsehe ich:

tail: cannot open `bar/somefile.log' for reading: No such file or directory
tail: cannot watch parent directory of `bar/somefile.log': No such file or directory

weil bares noch nicht existiert (es wird in wenigen Augenblicken erstellt). Als barerstellt und somefile.logberührt wurde, hat der Schwanz die Änderungen überhaupt nicht aufgenommen.

Antworten:


28

Das funktioniert:

while ! tail -f bar/somefile.log ; do sleep 1 ; done

Dies ist, was schließlich für mich funktioniert hat (für fehlende Fälle übergeordneter Verzeichnisse).
Srid sagt Reinstate Monica

Funktioniert das für Mac?
mCeviker

31

Sie erwähnen nicht, für welches Betriebssystem Sie es benötigen, aber tailunter Linux gibt es die Optionen --retry und --follow, die genau das tun.

tail --retry --follow=name somefile.log

6
danke oder tail -F somefile.log. aber dann scheitert der Schwanz aus einem anderen Grund (ich habe meine Frage aktualisiert)
Srid sagt Reinstate Monica

6

Erstellen Sie zuerst die Datei:

touch somefile ; tail -f somefile

Schöne elegante logische Lösung.
CarComp
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.