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 tail
cuando el archivo ya no se abre para escribir.
tail
comando con su opción de seguimiento.tail
funciona con archivos binarios también?less +F
wget ... && tar xjvf ...
Respuestas:
Lo probé en Ubuntu con el tarball fuente de LibreOffice mientras
wget
lo descargaba:También funciona en Solaris 10, RHEL3, AIX 5 y Busybox 1.22.1 en mi teléfono Android (uso
tail +1 -f file
con Busybox).fuente
/proc/*/fd/
periódicamente y verifique si el archivo está cerrado definitivamente.tail
funcionara con archivos binray ...-f
opción es estándar. Sin embargo, no terminará automáticamente cuando finalice la descarga.tail +1f
no funciona. Tienes que hacertail -n +1
El problema es que
cat
no es consciente de que el archivo todavía se está agregando. Tan pronto comocat
encuentra el final (actual) del archivo, sale.Tienes que hacer que
wget
escribir 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,tar
lee de forma estándar stdin, y (2) la mayoría de lostar
s pueden detectar la compresión automáticamente, por loj
que a menudo es innecesario.curl http://... | tar x
tee
esta manera:curl http://… | tee ….tbz | tar -xj
pero 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
+1f
mencionado por otros se interpreta como un nombre de archivo, al menos en eltail
comando 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 file
no lo hizo.tail +1f
cuando se combina con otras opciones como--pid