kurang dengan "perbarui file" seperti fungsionalitas

9

Saya ingin menonton file yang ditimpa setiap 5 menit less. Bagaimana saya bisa lessmengikuti deskriptor file baru alih-alih mempertahankan yang lama ditampilkan? watch "cat file"tidak akan melakukannya karena file terlalu panjang untuk masuk ke dalam satu jendela terminal.

d135-1r43
sumber
2
"Ikuti" menyiratkan mengikuti akhir file. Anda mungkin ingin mengklarifikasi bahwa file Anda ditimpa dan Anda tertarik untuk membukanya kembali.
chutz
Maksud saya mengikuti deskriptor file, seperti yang didefinisikan dalam tail -fhalaman manual. Namun demikian saya telah mengklarifikasi pertanyaan saya.
d135-1r43
Gunakan less --follow-namelihat unix.stackexchange.com/a/74287/112522
djsutho

Jawaban:

10

Anda bisa mendapatkan efek ini dengan mengeluarkan Fperintah ( Shift+F) saat melihat file less. Untuk berhenti mengikuti dan kembali ke halaman, tekanCtrl+C

Karena file Anda hanya berubah setiap 5 menit, Anda juga dapat menggunakan tail -fdan menentukan waktu tidur yang lebih lama dengan -s(default ke 1 detik). Contohnya,

tail -f -s 60 myfile

memeriksa myfileoutput setiap 60 detik.

EDIT: Karena pertanyaan yang menyesatkan, jawaban di atas tidak memuaskan. Upaya kedua berikut:

Untuk membuka kembali file yang sama lesssetiap 5 menit, coba ini:

while true; do ( sh -c 'sleep 600 && kill $PPID' & less myfile ); done

Ini akan memunculkan subkulit yang melatarbelakangi proses shell lain yang diperintahkan untuk membunuh proses induknya setelah 5 menit. Kemudian membuka file dengan less. Ketika perintah shell berlatar belakang membunuh subshell induk, itu membunuh semua anak-anaknya, termasuk perintah "kurang". Kemudian loop memulai proses lagi.

Satu-satunya cara mudah yang saya tahu untuk membunuh ini adalah dengan mematikan terminal tempat shell asli Anda berada. Jika itu tidak dapat diterima, Anda dapat menggunakan trik "killfile":

touch killfile
while [ -f killfile]; do stuff; done

Untuk berhenti melakukan stuff, rmkillfile di shell lain.

bonsaiviking
sumber
Ini hanya berguna sebagian untuk kasus saya. File yang ditonton sangat besar informasi yang diperbarui di bagian atas. Ini bukan file log "bergulir". Shift + F segera menggulir ke akhir file ...
d135-1r43
Anda harus mengedit pertanyaan Anda untuk menjelaskan. Saya mengedit jawaban saya untuk menjawab ini juga.
bonsaiviking
watch -n 1 less <filename>
axel22
1

Anda dapat melakukan hal serupa di vim.

Mulai sesi server dari vim:

vim -R --servername refresh_session

Kemudian di konsol lain, pantau file untuk pembaruan dan beri tahu sesi vim untuk memuat kembali file segera setelah diperbarui:

inotifywait -e close_write -m your_log_file | while read filename events; do
    vim --servername refresh_session --remote $filename
done

Beberapa gotcha.

  • Ini tentu saja tidak akan berfungsi jika Anda vimtidak dikompilasi dengan clientserverfitur dalam.
  • inoifywaitakan berhenti berfungsi saat file dihapus. Jadi saya harap file Anda ditimpa. Dimungkinkan untuk mengatasi itu juga, tentu saja.

Dan jika Anda ingin memiliki pengalaman yang lebih lessseperti, Anda dapat menggunakan lessmakro untuk mendapatkan lessbinding utama Anda vim.

/usr/share/vim/vim73/macros/less.sh --servername refresh_session
chutz
sumber
0

Saya menemukan program "kurang" seperti yang lama, tapi sangat bagus ("pager"). Ini memiliki perintah "R" yang menyegarkan file.

Ini disebut "lv" , Anda dapat menginstalnya di Ubuntu menggunakan:

sudo apt install lv

Namun, tampaknya tidak memiliki fitur pengisian otomatis.

Ronie
sumber
-1

Anda dapat mencoba perintah ini: file tail -f

FINESEC
sumber
-1

Ekor adalah temanmu. "tail -f filename" akan menampilkan baris baru saat muncul.

Atau jika Anda mencari perubahan yang dibuat di tengah file, mungkin jalankan skrip setiap beberapa menit untuk membuat salinan file ke lokasi temp dan lakukan perbedaan di dalamnya?

David W
sumber
Sudah cukup jelas bahkan dalam posting asli bahwa ada "file baru". Karenanya deskriptor file akan berubah tetapi tail -fmasih akan membaca yang lama.
Alastair Irvine
Saya pikir itu tidak adil. Agar jelas, kita perlu melihat posting asli, belum diedit, karena jika Anda melihat tanggal jawaban saya, itulah pertanyaan yang saya jawab. Dalam pertanyaan yang belum diedit itu, jawaban saya masuk akal. serverfault.com/posts/445899/revisi
David W
Saya memang memeriksa revisi. Kata kunci "file baru".
Alastair Irvine