заставить хвост ждать, пока файл будет существовать

25

tail -f bar/somefile.logнемедленно потерпит неудачу, если файл somefile.log не существует. Как заставить хвост неопределенно долго ждать создания этого файла (что произойдет через несколько минут)?

Обновление: используя -F, я вижу:

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

потому что barеще не существует (он будет создан через несколько минут). когда barбыл создан и somefile.logтронут, хвост вообще не уловил изменений.

Шридхар Ратнакумар
источник

Ответы:

28

Это работает:

while ! tail -f bar/somefile.log ; do sleep 1 ; done
Кир
источник
это то, что наконец-то сработало для меня (за отсутствующими родительскими каталогами).
Шридхар Ратнакумар
Будет ли это работать для Mac?
mCeviker
31

Вы не упоминаете, для какой ОС вам это нужно, но tailв linux есть опции --retry и --follow, которые это сделают;

tail --retry --follow=name somefile.log
Иоахим Исакссон
источник
6
спасибо, или tail -F somefile.log. но потом, хвост перестает
работать
6

Сначала создайте файл:

touch somefile ; tail -f somefile
psusi
источник
Хорошее элегантное логическое решение.
CarComp