Perintah Linux untuk menemukan file yang diubah dalam n detik terakhir


19

Saya ingin perintah Linux untuk menemukan file berubah di ndetik-detik terakhir .

Apakah ada skrip shell atau alat lain yang bisa saya jalankan dari antarmuka baris perintah atau GUI?

Jawaban:


14

Gunakan perintah find seperti ini:

find . -name "*.txt" -mtime -60s

Untuk menemukan semua *.txtfile yang dimodifikasi dalam 60 detik terakhir.


17
Di linux, menggunakan find (dari GNU findutils 4.4.2), saya mendapatkan error dengan perintah ini: 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 digunakan ssebagai argumen.
dr jimbob

4
-60s bukan argumen yang valid untuk -mtime. "60-an" juga bukan opsi yang valid di POSIX atau GNU find. Argumen ke -mtimeadalah angka yang menentukan jumlah periode 24 jam yang lalu ketika file diubah.
dannysauer

13

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

8

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.


6

Jika Anda memiliki versi find yang tidak mendukung -mtime -60smaka solusi yang lebih baik adalah

touch -d '-60 seconds' /tmp/newerthan
find . -name "*.txt" -newer /tmp/newerthan

6

Cara paling sederhana untuk melakukan ini adalah:

find . -name "*.txt" -newermt '6 seconds ago'

The -mtime -60spilihan, disebutkan dalam jawaban, tidak bekerja pada banyak versi find, bahkan pada tahun 2016. -newermtadalah pilihan yang jauh lebih baik untuk kita. Itu dapat menguraikan banyak format tanggal dan waktu yang berbeda.

Metode alternatif yang digunakan mminadalah:

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 findversi.


2
Ini jelas merupakan solusi terbaik.
rednoah

1

Jika Anda memantau direktori untuk perubahan pada file, Anda mungkin ingin menggunakan alat-alat yang tidak sah daripada beberapa loop polling yang tak terbatas.


1

Jika versi findAnda tidak menerima nilai detik atau nyata, seperti milik saya, gunakan -mmin, tetapi tentukan 0, dan Anda akan mendapatkan semua file dimodifikasi dalam waktu kurang dari satu menit:

$ touch test; find . -type f -mmin 0
./test
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.