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.