Назад | Перейти на главную страницу

хвост -f без хвоста?

Есть ли в Solaris команда для чтения файла и когда он доходит до конца, для потоковой передачи, как это делает tail? Мне нужно прочитать файл с самого начала, и это двоичный файл.

Информация о Solaris и Linux будет оценена.

В Linux вы можете использовать tail -f -n +0 /path/filename чтобы увидеть это. Хотя -n обычно указывает, сколько строк в конце файла вы хотите напечатать, при передаче +<n> он начинается с n-й строки от начала файла.

Из tail --help:

-n, --lines=K            output the last K lines, instead of the last 10;
                         or use -n +K to output lines starting with the Kth

tail -9999f сделает что-то близкое к тому, что вы хотите. Добавьте еще 9 секунд, если ваш файл больше.

Проблемы:

  1. Двоичные файлы могут не содержать символов новой строки. tail -f будет ждать новой строки, прежде чем что-либо печатать.
  2. Версия tail на Solaris (вы не упомянули который Solaris, но это, вероятно, не имеет значения), вероятно, не поддерживает эту опцию. Это может поддержать tail -n 9999 -f. Возможно, вам придется приобрести GNU-версию tail.
  3. Поскольку размер файла постоянно увеличивается, между выяснением его размера и запуском хвостового процесса возникает состояние гонки. Вы можете пропустить начало файла, если не попросите его набрать достаточно строк.
  4. tail не будет знать, когда вы действительно закончите запись в файл, поэтому ваш gzip процесс тоже никогда не закончится. Я не уверен, что будет, когда ты ctrl-c чтобы положить конец tail процесс, но вполне вероятно, что gzip очистит после себя и удалит файл, над которым он работал.

Я предлагаю запустить исходную программу и передать результат в gzip следующим образом:

./my_program | gunzip > new_file.txt

Таким образом, gunzip будет ждать, если my_program идет медленно, но все равно закончится, когда истинный конец файла обозначен my_program отделка.

Возможно, вам придется переписать вашу программу для записи в STDOUT, а не напрямую в файл.

Редактировать:

Посмотрев на страница руководства, можно решить три из вышеперечисленных проблем. Используя -c <bytes> вариант вместо -n <lines> смягчает проблему 1. Использование -n +0 или -c +0 смягчает проблему 3. Использование --pid=<PID> заставит хвост завершиться, когда исходная программа (работающая как <PID> ) завершается, что устраняет проблему 4.