Apakah ada perintah Linux bawaan untuk menampilkan isi direktori secara real-time?
8
Apakah ada perintah Linux built-in untuk menampilkan isi direktori secara real-time? Mirip dengan perintah "tail -f file_name" yang menampilkan isi file secara real-time.
Jika Anda ingin melihat file baru dengan lebih jelas, gunakan ls -ltuntuk melihat file baru di bagian atas daftar atau ls -ltruntuk melihat file baru di bagian bawah. Kemudian, untuk menyorot file-file baru itu, gunakan watch -duntuk menyorot perubahan dalam pembaruan terbaru atau watch --differences=cumulativeuntuk menyorot semua perubahan sejak watchdimulai.
garyjohn
@ jm666 - watch tail lsatau watch head lsakan menampilkan file terbaru dengan opsi pemesanan ls yang benar , seperti -lt dengan head atau -ltr dengan tail .
AFH
@ jm666 - Tentu saja itu omong kosong jika dipahami secara harfiah: Saya menggunakannya sebagai singkatan untukwatch {options} 'ls {options} | tail {options}'
AFH
@ jm666: Permintaan adalah untuk perintah yang mengikuti perubahan ke direktori sebagai tail -fberikut perubahan ke file. Perintah awal Anda adalah itu watchtidak melakukannya dengan sangat baik. Saya pikir itu akan, jika perintah yang dijalankan dibuat dengan tepat. Terkadang Anda harus menggunakan sh -cuntuk membungkus perintah yang lebih rumit. Saya melihat secara singkat inotify-tools dan tidak melihat perintah yang akan menunjukkan perubahan pada direktori, bukan hanya kejadian yang diterapkan pada direktori.
garyjohn
2
Saya menulis ini, saya harap ini yang Anda butuhkan. Ini bukan built-in Linux command, tetapi hanya menggunakan program umum yang ada di sebagian besar kotak UNIX.
Sesuaikan sleepwaktu sesuai kebutuhan. Saya akan menggunakan nilai minimal 2 detik. Gunakan cmd="ls"untuk struktur non-rekursif atau cmd="find DIRNAME"untuk mencari secara rekursif. Perhatikan bahwa dalam kasus terakhir, Anda akan mendapatkan DIRNAME/awalan untuk semua file dan direktori.
echo ""| awk '{while ( 1 ) {cmd="find ."; delete b;c=0; while ( ( cmd | getline result ) > 0 ) {test=1;c++;n=0;for (i in a) {n++;if (a[i]==result) {b[c]=i; test=0; break;}} if (test) {n++;a[n]=result;b[c]=n;print "##NEW## "result }} close (cmd); for (i in a) {test=1;for (j in b) {if (b[j]==i) {test=0;break}} if (test) {print "##DELETED## "a[i]; delete a[i]}} system("sleep 5") } }'
Menemukan bug yang membuat inilai hilang setelah melakukan loop yang membuat skrip menampilkan semuanya sebagai baru setiap kali pada beberapa mesin linux
Anda dapat menggunakan inotifytoolsdan utilitas baris perintahnya.
Anda dapat menggunakan inotifyuntuk memantau direktori, dan itu akan mengembalikan acara untuk direktori itu sendiri, dan untuk file di dalam direktori.
Alat lain yang dapat digunakan adalah inotifywatch:
watch -n1 ls
inotifytools
paket menggunakaninotify
fitur Linux untuk memungkinkan menonton acara pembuatan file saat mereka terjadi.Jawaban:
Anda dapat melakukan ini dengan menggunakan
watch
. Ini tidak sepenuhnya real-time, tetapi cukup dekat (hingga sepersepuluh detik):dari manual:
sumber
ls -lt
untuk melihat file baru di bagian atas daftar atauls -ltr
untuk melihat file baru di bagian bawah. Kemudian, untuk menyorot file-file baru itu, gunakanwatch -d
untuk menyorot perubahan dalam pembaruan terbaru atauwatch --differences=cumulative
untuk menyorot semua perubahan sejakwatch
dimulai.watch tail ls
atauwatch head ls
akan menampilkan file terbaru dengan opsi pemesanan ls yang benar , seperti -lt dengan head atau -ltr dengan tail .watch {options} 'ls {options} | tail {options}'
tail -f
berikut perubahan ke file. Perintah awal Anda adalah ituwatch
tidak melakukannya dengan sangat baik. Saya pikir itu akan, jika perintah yang dijalankan dibuat dengan tepat. Terkadang Anda harus menggunakansh -c
untuk membungkus perintah yang lebih rumit. Saya melihat secara singkat inotify-tools dan tidak melihat perintah yang akan menunjukkan perubahan pada direktori, bukan hanya kejadian yang diterapkan pada direktori.Saya menulis ini, saya harap ini yang Anda butuhkan. Ini bukan
built-in Linux command
, tetapi hanya menggunakan program umum yang ada di sebagian besar kotak UNIX.Sesuaikan
sleep
waktu sesuai kebutuhan. Saya akan menggunakan nilai minimal 2 detik. Gunakancmd="ls"
untuk struktur non-rekursif ataucmd="find DIRNAME"
untuk mencari secara rekursif. Perhatikan bahwa dalam kasus terakhir, Anda akan mendapatkanDIRNAME/
awalan untuk semua file dan direktori.sumber
i
nilai hilang setelah melakukan loop yang membuat skrip menampilkan semuanya sebagai baru setiap kali pada beberapa mesin linuxIni sangat sederhana setelah saya mengetahuinya.
sumber
Anda dapat menggunakan
inotifytools
dan utilitas baris perintahnya.Anda dapat menggunakan
inotify
untuk memantau direktori, dan itu akan mengembalikan acara untuk direktori itu sendiri, dan untuk file di dalam direktori.Alat lain yang dapat digunakan adalah
inotifywatch
:Anda dapat menambahkan
-r
untuk menonton semua subdirektori secara rekursif. Namun solusi ini tidak mendeteksi perubahan pada file yang baru dibuat .Jadi solusi lain adalah menggunakan
inotifywait
:Berikut adalah contoh lain untuk menampilkan konten dari semua
test*
file yang baru dibuat di/tmp
:sumber