Temukan file yang lebih baru dari 15 detik tetapi lebih dari 2 detik

17

Saya ingin mencari file yang lebih baru dari 15 detik tetapi lebih dari 2 detik. Ini adalah skrip yang saya gunakan saat ini yang mengambil file yang lebih baru dari 15 detik:

find /my/directory -name '*.jpg' -not -newermt '-15 seconds'

Setiap bantuan sangat dihargai

Yllier123
sumber
2
Sistem operasi apa yang Anda gunakan? Ada perbedaan dalam findimplementasinya.
terdon
Haruskah file diubah tepat 2 detik yang lalu cocok? Bagaimana dengan file yang dimodifikasi tepat 15 detik yang lalu?
Mikel
Lebih baru dari 2 detik pada saat script mulai atau pada saat itu berakhir?
Stéphane Chazelas
@Mikel, itu mungkin tidak relevan karena jam memiliki resolusi nanosecond saat ini.
Stéphane Chazelas
1
Ok ... karena tidak ada orang lain yang bertanya ... @ Yllier123 mengapa Anda perlu mencari file yang dibuat antara 2 <x <15 detik? Saya hanya penasaran.
C Bauer

Jawaban:

17

Anda dapat menggabungkan beberapa predikat dengan merantainya.

Tidak ada -oldermt, tetapi Anda dapat menuliskannya sebagai -not -newermt.

Kamu ingin:

  • -newermt '-15 seconds' mengatakan file berumur kurang dari 15 detik, dan
  • -not -newermt '-2 seconds' mengatakan file lebih dari 2 detik

Mencoba:

find /my/directory -newermt '-15 seconds' -not -newermt '-2 seconds'

Atau, agar memenuhi POSIX:

find /my/directory -newermt '-15 seconds' \! -newermt '-2 seconds'

Juga, supaya Anda (dan pembaca lain) sadar, "baru" berarti dimodifikasi lebih baru daripada, tidak dibuat lebih baru daripada.

Mikel
sumber
3
Bagus. Catatan yang -not -newermt '-2 seconds'juga akan cocok dengan file berumur tepat 2 detik. Gunakan -not -newermt '3 seconds'untuk mengecualikan mereka juga.
terdon
1
Ya, kasus tepi selalu menyenangkan. Saya sebenarnya tidak yakin resolusi apa yang digunakan untuk perbandingan ini. Asumsi saya adalah bahwa segala sesuatu yang dimodifikasi ~ 2.000000001 detik yang lalu adalah cocok, tetapi itu juga akan tergantung pada sistem file dan sistem operasi Anda.
Mikel
Poin bagus, saya tidak tahu apa resolusi itu. Saya baru saja diuji dengan touch -d "2 seconds ago" file; find . -newermt '-15 seconds' -not -newermt '-2 seconds'dan mendapatkannya file.
terdon
@terdon Yah, itu tergantung pada apakah cap waktu memiliki resolusi yang lebih tepat daripada satu detik; itu akan tergantung pada sistem, sistem file, dan bahkan mungkin bervariasi antara file pada sistem file yang sama jika itu digunakan oleh beberapa mesin yang berbeda.
Blacklight Shining
"lebih baru" berarti "lebih baru dari". Ini adalah "m" yang berarti "dimodifikasi".
OrangeDog
4

Anda tidak menyebutkan OS Anda ....

Ini berfungsi baik dengan implementasi find modern seperti yang dari FreeBSD atau dengan sfind.

find /my/directory -name '*.jpg' -mtime -15s -mtime +2s

Sfind adalah bagian dari alat Schily: http://sourceforge.net/projects/schilytools/files/

PERINGATAN: Saya baru saja menemukan masalah di sfind. Jika -mtimeargumen kurang dari 60-an, itu tidak akan berfungsi dengan benar karena waktu file saat ini dibandingkan dengan cap waktu 60 detik di masa depan yang awalnya dihitung untuk pergantian tahun -ls.

BTW: -notbukan milik find, itu adalah GNUisme non-portabel.

schily
sumber
1
Ada bashtag ... Jadi lingkungannya bisa Cygwin, Debian GNU / Hurd, bashberjalan di FreeBSD atau Solaris, ... ;-)
phk
Untuk GNU find, tampaknya desimal, meskipun gila, dapat digunakan sebagai solusi.
Arthur2e5
Menemukan POSIX memang memiliki !untuk -tidak sebagai! expression . Jadi, bukan masalah besar.
@ php Ini sebabnya saya menyebutkan metode yang bekerja dengan standar yang ditingkatkan primarydarifind untuk memberi tahu orang-orang bahwa tidak perlu selalu menambahkan yang baru primariesuntuk menemukan untuk dapat meningkatkan fungsionalitas. BTW: Suatu perbaikan libfindtelah diterbitkan di Internet schily tools.
schily
@ BinaryZebra masalahnya adalah yang gfindmenambahkan -notalias sama sekali. Itu tidak pernah dibutuhkan dan kehadirannya dapat dilihat sebagai kunci strategi vendor.
schily