File sedang diunduh secara berurutan oleh wget
.
Jika saya mulai membongkar dengan cat myfile.tar.bz2 | tar -xj
, itu mungkin membongkar dengan benar atau gagal dengan "EOF Tidak Terduga", tergantung pada apa yang lebih cepat.
Cara "mengecat dan mengikuti" file, yaitu konten output file ke stdout, tetapi jangan keluar di EOF, alih-alih tetap berlangganan file itu dan terus mengeluarkan bagian data baru, keluar hanya jika file ditutup oleh penulis dan tidak dibuka kembali dalam N detik.
Saya telah membuat skrip cat_and_follow berdasarkan jawaban @ arielCo yang juga mengakhiri tail
kapan file tidak lagi dibuka untuk ditulis.
tail
perintah dengan opsi ikuti.tail
bekerja dengan file biner juga?less +F
...wget ... && tar xjvf ...
Jawaban:
Saya mengujinya di Ubuntu dengan tarball sumber LibreOffice saat
wget
mengunduhnya:Ini juga berfungsi pada Solaris 10, RHEL3, AIX 5 dan Busybox 1.22.1 di ponsel Android saya (digunakan
tail +1 -f file
dengan Busybox).sumber
/proc/*/fd/
secara berkala dan memeriksa apakah file ditutup untuk selamanya.tail
bekerja dengan file binray ...-f
pilihannya standar. Namun, itu tidak akan berakhir secara otomatis ketika unduhan selesai.tail +1f
tidak bekerja. Anda harus melakukannyatail -n +1
Masalahnya adalah bahwa
cat
tidak menyadari bahwa file tersebut masih ditambahkan. Segera setelahcat
menemukan ujung (saat ini) dari file itu keluar.Anda harus
wget
menulis ke pipa (atau FIFO) untuk menghindari hal ini.sumber
curl
, yang output ke stdout secara default. Dan (1)-f -
redundan,tar
dibaca dari stdin secara default, dan (2) kebanyakantar
s dapat mendeteksi kompresi secara otomatis, sehinggaj
seringkali tidak diperlukan.curl http://... | tar x
tee
seperti inicurl http://… | tee ….tbz | tar -xj
:, tetapi melanjutkan unduhan menjadi lebih rumit daripada hanya menjalankan perintah yang sama lagi.Untuk membaca dan mengikuti file dari awal hingga terputus:
Untuk menunjukkan itu, coba ini (dengan asumsi Bash dengan GNU Coreutils):
(Catatan: Yang
+1f
disebutkan oleh orang lain ditafsirkan sebagai nama file, setidaknya dalamtail
perintah GNU .)Di atas berfungsi untuk satu file. Penggabungan beberapa file tidak akan dapat mengikuti semuanya secara deterministik, tanpa bergantung pada yang pertama. Untuk ' mengikuti dan mengikuti ', hanya dengan mengikuti file terakhir, seseorang dapat menggunakan subtitusi proses . Ini demonstrasi lain:
sumber
tail +1f file
tidak.tail +1f
ketika menggabungkannya dengan opsi lain seperti--pid