tail: чтение всего файла, а затем

35

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


РЕШЕНИЕ

На основании ответа, который я принял, это работает: tail -f -n +1 {filename}

Почему это работает:-f вариант продолжает «следовать» файл и вывод новых линии , как они записаны в файл. В -n +1инструктирует , tailчтобы начать чтение файла с первой строки. Использование -n -10будет начинаться с последних десяти строк файла.

Сынок
источник
2
Это комментарий, а не вопрос. И разве хвост не делает этого: tail -f -n 10000000000000000000вероятно, покажет все строки, не так ли? (может быть, 10000000000000000000 немного больше: =))
Rinzwind
Я верю, more fileNameчто сделал бы именно это
Ryekayo
1
нет .. больше не будет добавлять дополнительные строки, добавленные в файл после запуска more.
Rinzwind
Предположительно tail -f -n 100...потребуется предварительное чтение файла для определения количества строк, если только он не достаточно умный, чтобы определить верхнюю границу для количества строк на основе размера файла.
mwfearnley

Ответы:

51

использование

tail -f -n +1

Использование man tailдаст вам больше деталей, соответствующий отрывок следует.

<snip>Numbers having a leading plus (`+') sign are relative to the
beginning of the input, for example, ``-n +2'' starts the display at the
second line of the input.</snip>

-f      The -f option causes tail to not stop when end of file is
        reached, but rather to wait for additional data to be appended to
        the input.  The -f option is ignored if the standard input is a
        pipe, but not if it is a FIFO.

-n number
        The location is number lines.
Тимо клак
источник
3
Не могли бы вы добавить эти "более подробную информацию" в свой ответ? Пожалуйста, объясните, почему и как работает ваше решение. (
Наш
1
@kraxor Вы можете найти «более подробную информацию», выполнив man tail(и прочитав), как говорится в ответе, или выполните онлайн-поиск «tail manpage» и прочитайте одну из них. tailработает, начиная с позиции в файле, читает (и отображает) до конца, а затем отслеживает увеличение размера файла. Когда размер файла увеличивается, tailсчитывает и отображает от прежней позиции EOF до нового конца файла.
Вальтинатор
2
@waltinator Я действительно не просил себя. Я попросил его добавить больше деталей, потому что его сообщение было помечено как низкое качество, но я не хотел голосовать, чтобы удалить, потому что он дал правильный ответ.
Краксор
1
Это именно то, что я искал. Я использовал tail -50 {filename}ранее, но безуспешно сочетал их.
Сонни,
3

Попробуй это:

watch tail {filename}

где {filename}файл, за которым вы хотите следить. Это будет постоянно контролировать команду на наличие изменений и выводить изменения на стандартный вывод. Это очень удобно.

Рик Чатем
источник
Это выглядит как очень хороший инструмент. Хотя это не совсем дало те результаты, которые я искал, я определенно буду помнить об этом. Совмещать его с принятым ответом довольно приятно:watch tail -n +1 {filename}
Сонни,
Да, похоже, ты усовершенствовал это!
Рик Чатем
watchдействительно полезный инструмент, но для наблюдения за изменяющимся выводом команды, но для наблюдения за концом добавляемого файла его намного лучше использовать tail -f. --- watch tail {filename}будет открывать и перечитывать конец файла каждые две секунды. С другой стороны, tail -fследит за ростом файла, и при обнаружении он сразу читает только добавленную часть. tailf -fгораздо эффективнее, и реакция намного быстрее. Кроме того, он будет постоянно показывать содержимое файла с того места, с которого вы начали. --- watchперезаписывает свой вывод каждые две секунды.
Пабук