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.

Goku__
sumber
4
Bagaimanawatch -n1 ls
Joe
Lihat jam tangan ( linfo.org/watch.html )
David
4
Tidak cukup built-in, tetapi inotifytoolspaket menggunakan inotifyfitur Linux untuk memungkinkan menonton acara pembuatan file saat mereka terjadi.
chepner

Jawaban:

6

Anda dapat melakukan ini dengan menggunakan watch. Ini tidak sepenuhnya real-time, tetapi cukup dekat (hingga sepersepuluh detik):

watch -n0.1 ls

dari manual:

-n, --interval seconds
          Specify update interval.  The command will not allow quicker than 0.1 second interval, in which the smaller values are converted.
Chris Maes
sumber
1
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") } }'
NuTTyX
sumber
Menemukan bug yang membuat inilai hilang setelah melakukan loop yang membuat skrip menampilkan semuanya sebagai baru setiap kali pada beberapa mesin linux
NuTTyX
1

Ini sangat sederhana setelah saya mengetahuinya.

watch -d dir_name
Goku__
sumber
0

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:

sudo inotifywatch -v -r /foo

Anda dapat menambahkan -runtuk menonton semua subdirektori secara rekursif. Namun solusi ini tidak mendeteksi perubahan pada file yang baru dibuat .

Jadi solusi lain adalah menggunakan inotifywait:

inotifywait -m --format "%f" /foo

Berikut adalah contoh lain untuk menampilkan konten dari semua test*file yang baru dibuat di /tmp:

inotifywait -m --format "%f" /tmp | grep --line-buffered ^test | xargs -L1 -I% sudo cat /tmp/% 2> /dev/null
kenorb
sumber