Un archivo está siendo descargado secuencialmente por wget.
Si empiezo a descomprimirlo cat myfile.tar.bz2 | tar -xj, puede descomprimirlo correctamente o puede fallar con "EOF inesperado", dependiendo de lo que sea más rápido.
Cómo "catear y seguir" un archivo, es decir, enviar el contenido del archivo a stdout, pero no salir en EOF, en cambio, mantenerse suscrito a ese archivo y continuar enviando nuevas porciones de datos, saliendo solo si el archivo está cerrado por escritor y no se vuelve a abrir en N segundos.
He creado un script cat_and_follow basado en la respuesta de @ arielCo que también termina tailcuando el archivo ya no se abre para escribir.

tailcomando con su opción de seguimiento.tailfunciona con archivos binarios también?less +Fwget ... && tar xjvf ...Respuestas:
Lo probé en Ubuntu con el tarball fuente de LibreOffice mientras
wgetlo descargaba:También funciona en Solaris 10, RHEL3, AIX 5 y Busybox 1.22.1 en mi teléfono Android (uso
tail +1 -f filecon Busybox).fuente
/proc/*/fd/periódicamente y verifique si el archivo está cerrado definitivamente.tailfuncionara con archivos binray ...-fopción es estándar. Sin embargo, no terminará automáticamente cuando finalice la descarga.tail +1fno funciona. Tienes que hacertail -n +1El problema es que
catno es consciente de que el archivo todavía se está agregando. Tan pronto comocatencuentra el final (actual) del archivo, sale.Tienes que hacer que
wgetescribir a una tubería (o FIFO) con el fin de evitar esto.fuente
curl, que sale a stdout por defecto. Y (1)-f -es redundante,tarlee de forma estándar stdin, y (2) la mayoría de lostars pueden detectar la compresión automáticamente, por lojque a menudo es innecesario.curl http://... | tar xteeesta manera:curl http://… | tee ….tbz | tar -xjpero reanudar la descarga se vuelve más complicado que simplemente invocar el mismo comando nuevamente.Para leer y seguir un archivo desde el principio hasta que se interrumpa:
Para demostrarlo, intente esto (suponiendo Bash con GNU Coreutils):
(Nota: lo
+1fmencionado por otros se interpreta como un nombre de archivo, al menos en eltailcomando GNU ).Lo anterior funciona para un solo archivo. La concatenación de múltiples archivos no podría seguirlos a todos de manera determinista, sin colgarse del primero. Para ' cat and follow ', siguiendo solo el último archivo, se puede usar la sustitución del proceso . Aquí hay otra demostración:
fuente
tail +1f fileno lo hizo.tail +1fcuando se combina con otras opciones como--pid