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.

Srid sagt Reinstate Monica
quelle

Antworten:

28

Das funktioniert:

while ! tail -f bar/somefile.log ; do sleep 1 ; done
cYrus
quelle
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
Joachim Isaksson
quelle
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
Psusi
quelle
Schöne elegante logische Lösung.
CarComp