Saya ingin perintah Linux untuk menemukan file berubah di n
detik-detik terakhir .
Apakah ada skrip shell atau alat lain yang bisa saya jalankan dari antarmuka baris perintah atau GUI?
Saya ingin perintah Linux untuk menemukan file berubah di n
detik-detik terakhir .
Apakah ada skrip shell atau alat lain yang bisa saya jalankan dari antarmuka baris perintah atau GUI?
Jawaban:
Gunakan perintah find seperti ini:
find . -name "*.txt" -mtime -60s
Untuk menemukan semua *.txt
file yang dimodifikasi dalam 60 detik terakhir.
-mtime
. "60-an" juga bukan opsi yang valid di POSIX atau GNU find. Argumen ke -mtime
adalah angka yang menentukan jumlah periode 24 jam yang lalu ketika file diubah.
Solusi dengan detik menentukan mtime tidak berfungsi pada sistem linux saya yang menggunakan find --version
== find (GNU findutils) 4.4.2
.
Saya mendapatkan kesalahan berikut:
mycomputer:~/new$ find . -mtime -60s
find: missing argument to `-mtime'
mycomputer:~/new$ find . -mtime -60seconds
find: missing argument to `-mtime'
Namun, saya dapat menggunakan -mmin
(untuk dimodifikasi dalam m menit terakhir), dan dapat mengambil argumen desimal; misal, file-file find berikut ini dimodifikasi dalam 30 detik terakhir.
find . -mmin 0.5
Jadi misalnya; membuat file yang terakhir diubah 1s, 6s, 11s, ... lalu selama 120 detik terakhir, perintah ini menemukan:
mycomputer:~/new$ for i in $(seq 1 5 120); do touch -d "-$i seconds" last_modified_${i}_seconds_ago ; done
mycomputer:~/new$ find . -mmin 0.5
.
./last_modified_1_seconds_ago
./last_modified_26_seconds_ago
./last_modified_11_seconds_ago
./last_modified_16_seconds_ago
./last_modified_21_seconds_ago
./last_modified_6_seconds_ago
Jadi jika Anda benar-benar membutuhkannya dalam hitungan detik, Anda dapat melakukan sesuatu seperti:
localhost:~/new$ for i in $(seq 1 1 120); do touch -d "-$i seconds" last_modified_${i}_seconds_ago ; done
localhost:~/new$ N=18; find . -mmin $(echo "$N/60"|bc -l)
./last_modified_1_seconds_ago
./last_modified_9_seconds_ago
./last_modified_14_seconds_ago
./last_modified_4_seconds_ago
./last_modified_12_seconds_ago
./last_modified_13_seconds_ago
./last_modified_8_seconds_ago
./last_modified_3_seconds_ago
./last_modified_5_seconds_ago
./last_modified_11_seconds_ago
./last_modified_17_seconds_ago
./last_modified_16_seconds_ago
./last_modified_7_seconds_ago
./last_modified_15_seconds_ago
./last_modified_10_seconds_ago
./last_modified_6_seconds_ago
./last_modified_2_seconds_ago
Mirip dengan apa yang disarankan glenn, jika Anda ingin menemukan semuanya dimodifikasi, katakanlah, pada saat proses penginstal berjalan, mungkin lebih mudah untuk melakukan sesuatu seperti:
touch /tmp/checkpoint
<do installer stuff>
find / -newer /tmp/checkpoint
Maka Anda tidak perlu melakukan perhitungan waktu; Anda baru saja menemukan hal-hal berubah setelah file pos pemeriksaan.
Cara paling sederhana untuk melakukan ini adalah:
find . -name "*.txt" -newermt '6 seconds ago'
The -mtime -60s
pilihan, disebutkan dalam jawaban, tidak bekerja pada banyak versi find
, bahkan pada tahun 2016. -newermt
adalah pilihan yang jauh lebih baik untuk kita. Itu dapat menguraikan banyak format tanggal dan waktu yang berbeda.
Metode alternatif yang digunakan mmin
adalah:
find . -name "*.txt" -mmin -0.5
# Finds files modified within the last 0.5 minute, i.e. last 30 seconds
Opsi ini mungkin tidak berfungsi untuk semua find
versi.
Jika Anda memantau direktori untuk perubahan pada file, Anda mungkin ingin menggunakan alat-alat yang tidak sah daripada beberapa loop polling yang tak terbatas.
find: missing argument to `-mtime'
. Namun, saya bisa mendapatkan perilaku yang diinginkan menggunakan -mmin dan argumen desimal. Saya tidak dapat menemukan referensi di halaman manual untuk menemukan untuk digunakans
sebagai argumen.