2013-06-21 2 views
1

Я пытаюсь найти способ сделать tail ждать создания файлов, а затем начать их хвост.Как заставить хвост ждать создания файлов перед их отбрасыванием

Например, допустим, у меня есть каталог logs, который еще не создан, но мое приложение создаст его. Предположим, у меня есть другой процесс, в котором я хотел бы запустить tail -F logs/*.log и заставить его запускать все файлы сразу после их создания. Как мне это сделать?

И еще одно: если tail отбрасывает какой-то файл, который удаляется, возможно ли, чтобы он снова начал хвост, если он заново создан?

+1

Duplicate on Unix.SE: [контролировать файлы (ala tail -f) во всей директории (даже новые)] (http://unix.stackexchange.com/questions/39729/monitor-files-ala-tail -f-in-a-all-directory-even-new-ones) – Koterpillar

+0

Спасибо! Я посмотрел и установил его. Я попробовал пример в приведенной ссылке, но я не могу заставить его работать. Не могли бы вы дать дополнительные объяснения и пример? – carlspring

+0

Так что случилось с этим примером? – Koterpillar

ответ

2

С некоторой шероховатостью, это работает:

while inotifywait -q .; do kill $PID; tail -F -n 0 * & PID=$!; done 

После того, как что-либо в изменении каталога, команда tail перезапускается.

+0

Прохладный ответ! :) – carlspring

0

И еще одно: если хвост хвостает какой-то файл, который удаляется, возможно ли, чтобы он снова начал его хвост, если он заново создан?

В то время как вы являетесь tail Некорректный файл, который усекается и воссоздается; Команда tail обрабатывает ее автоматически. Вам не нужно повторно выдавать команду tail для этого конкретного файла.

+0

Это верно только в том случае, если каталог не был удален. Как только он удаляется, 'tail' сообщает об этом и перестает искать там изменения. Если ваше приложение повторно создает папку, 'tail' будет продолжать перекатывать данные. – carlspring