Файл последовательно загружается wget
.
Если я начну распаковывать его cat myfile.tar.bz2 | tar -xj
, он может распаковать правильно или потерпеть неудачу с «Неожиданным EOF», в зависимости от того, что быстрее.
Как «отслеживать и отслеживать» файл, т.е. выводить содержимое файла на стандартный вывод, но не выходить в EOF, вместо этого сохранять подписку на этот файл и продолжать выводить новые части данных, выходя только в том случае, если файл закрыт писатель и не открывался в течение N секунд.
Я создал сценарий cat_and_follow , основанный на @ arielCo в ответ , что также расторгает , tail
когда файл не открыт для записи больше.
tail
команду с ее последующей функцией.tail
также работает с бинарными файлами?less +F
...wget ... && tar xjvf ...
Ответы:
Я тестировал его в Ubuntu с архивом исходного кода LibreOffice, пока
wget
загружал его:Он также работает на Solaris 10, RHEL3, AIX 5 и Busybox 1.22.1 в моем телефоне Android (используется
tail +1 -f file
с Busybox).источник
/proc/*/fd/
периодически сканировать и проверять, закрыт ли файл навсегда.tail
работает с файлами binray ...-f
вариант стандартный. Тем не менее, он не завершится автоматически, когда загрузка будет завершена.tail +1f
не работает. Вы должны сделатьtail -n +1
Проблема в том, что
cat
не знает, что файл все еще добавляется. Как толькоcat
встречает (текущий) конец файла, он выходит.Вы должны сделать
wget
запись в канал (или FIFO), чтобы избежать этого.источник
curl
, который выводит на стандартный вывод по умолчанию. И (1)-f -
является избыточным,tar
читает из стандартного стандартного ввода по умолчанию, и (2) большинствоtar
s могут автоматически определять сжатие, поэтомуj
часто это не требуется.curl http://... | tar x
tee
:,curl http://… | tee ….tbz | tar -xj
но возобновление загрузки становится более сложным, чем повторный вызов той же команды.Чтобы прочитать и проследить за файлом с начала и до прерывания:
Чтобы продемонстрировать это, попробуйте это (предполагая Bash с GNU Coreutils):
(Примечание:
+1f
упомянутое другими интерпретируется как имя файла, по крайней мере, в команде GNUtail
.)Вышеуказанное работает для одного файла. Конкатенация нескольких файлов не сможет следовать за всеми ними детерминистически, не повиснув на первом. Чтобы « следить и следовать », следуя только за последним файлом, можно использовать подстановку процесса . Вот еще одна демонстрация:
источник
tail +1f file
нет.tail +1f
при сочетании его с другими вариантами, такими как--pid