Um arquivo está sendo baixado sequencialmente por wget
.
Se eu começar a descompactá-lo cat myfile.tar.bz2 | tar -xj
, ele pode descompactar corretamente ou falhar com "EOF inesperado", dependendo do que for mais rápido.
Como "capturar e seguir" um arquivo, ou seja, enviar o conteúdo do arquivo para stdout, mas não sair no EOF, mantenha-se inscrito nesse arquivo e continue produzindo novas partes dos dados, saindo apenas se o arquivo for fechado por escritor e não reaberto dentro de N segundos.
Eu criei um script cat_and_follow com base na resposta da @ arielCo que também encerra tail
quando o arquivo não está mais sendo aberto para gravação.
tail
comando com sua opção follow.tail
funciona com arquivos binários também?less +F
...wget ... && tar xjvf ...
Respostas:
Eu testei no Ubuntu com o tarball de origem do LibreOffice enquanto
wget
fazia o download:Também funciona no Solaris 10, RHEL3, AIX 5 e Busybox 1.22.1 no meu telefone Android (use
tail +1 -f file
com o Busybox).fonte
/proc/*/fd/
periodicamente e verifique se o arquivo está fechado definitivamente.tail
funcionasse com arquivos binray ...-f
opção seja padrão. No entanto, ele não será encerrado automaticamente quando o download for concluído.tail +1f
não funciona. Você precisa fazertail -n +1
O problema é que
cat
não está ciente de que o arquivo ainda está sendo anexado. Assim quecat
encontrar o final (atual) do arquivo, ele será encerrado.É necessário
wget
gravar em um canal (ou FIFO) para evitar isso.fonte
curl
, que gera para stdout por padrão. E (1)-f -
é redundante,tar
lê de stdin por padrão e (2) a maioria dostar
s pode detectar a compactação automaticamente, portanto,j
muitas vezes é desnecessário.curl http://... | tar x
tee
seguintecurl http://… | tee ….tbz | tar -xj
:, mas retomar o download fica mais complicado do que simplesmente chamar o mesmo comando novamente.Para ler e seguir um arquivo desde o início até a interrupção:
Para demonstrar isso, tente o seguinte (assumindo o Bash com o GNU Coreutils):
(Nota: O
+1f
mencionado por outros é interpretado como um nome de arquivo, pelo menos notail
comando GNU .)O acima funciona para um único arquivo. A concatenação de vários arquivos não seria capaz de seguir todos eles de forma determinística, sem esperar pelo primeiro. Para ' cat and follow ', seguindo apenas o último arquivo, pode-se usar a substituição de processo . Aqui está outra demonstração:
fonte
tail +1f file
não funcionou.tail +1f
quando combinando-a com outras opções, como--pid