Un fichier est en cours de téléchargement séquentiel par wget
.
Si je commence à le déballer cat myfile.tar.bz2 | tar -xj
, il peut déballer correctement ou échouer avec "EOF inattendu", selon ce qui est plus rapide.
Comment "attraper et suivre" un fichier, c'est-à-dire sortir le contenu du fichier vers stdout, mais ne quittez pas sur EOF, au lieu de cela, abonnez-vous à ce fichier et continuez à sortir de nouvelles parties des données, en ne sortant que si le fichier est fermé par écrivain et non rouvert dans les N secondes.
J'ai créé un script cat_and_follow basé sur la réponse de @ arielCo qui termine également tail
lorsque le fichier n'est plus ouvert pour l'écriture.
tail
commande avec son option de suivi.tail
fonctionne également avec les fichiers binaires?less +F
...wget ... && tar xjvf ...
Réponses:
Je l'ai testé sur Ubuntu avec l'archive source de LibreOffice lors du
wget
téléchargement:Il fonctionne également sur Solaris 10, RHEL3, AIX 5 et Busybox 1.22.1 sur mon téléphone Android (à utiliser
tail +1 -f file
avec Busybox).la source
/proc/*/fd/
régulièrement et vérifie si le fichier est définitivement fermé.tail
fonctionne avec les fichiers binray ...-f
option est standard. Cependant, il ne se terminera pas automatiquement une fois le téléchargement terminé.tail +1f
ne fonctionne pas. Vous devez fairetail -n +1
Le problème est que vous
cat
ne savez pas que le fichier est toujours en cours d’ajout. Dès qu'ilcat
rencontre la fin (actuelle) du fichier, il se ferme.Vous devez faire
wget
écrire sur un tube (ou FIFO) pour éviter cela.la source
curl
, qui sort par défaut sur stdout. Et (1)-f -
est redondant,tar
lit depuis stdin par défaut, et (2) la plupart destar
s peuvent détecter automatiquement la compression, ce quij
est souvent inutile.curl http://... | tar x
tee
comme cecicurl http://… | tee ….tbz | tar -xj
:, mais la reprise du téléchargement devient plus compliquée que de simplement invoquer à nouveau la même commande.Pour lire et suivre un fichier depuis le début jusqu'à son interruption:
Pour le démontrer, essayez ceci (en supposant Bash avec GNU Coreutils):
(Remarque: le
+1f
mentionné par d'autres est interprété comme un nom de fichier, au moins dans latail
commande GNU .)Ce qui précède fonctionne pour un seul fichier. La concaténation de plusieurs fichiers ne serait pas en mesure de les suivre tous de manière déterministe, sans s'accrocher au premier. Pour ' cat and follow ', en ne suivant que le dernier fichier, on peut utiliser la substitution de processus . Voici une autre démonstration:
la source
tail +1f file
que non.tail +1f
lors de la combinaison avec d'autres options telles que--pid