Есть ли в 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 секунд, если ваш файл больше.
Проблемы:
tail -f
будет ждать новой строки, прежде чем что-либо печатать.tail
на Solaris (вы не упомянули который Solaris, но это, вероятно, не имеет значения), вероятно, не поддерживает эту опцию. Это может поддержать tail -n 9999 -f
. Возможно, вам придется приобрести GNU-версию tail.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.