Trova file più recenti di 15 secondi ma più vecchi di 2 secondi


17

Voglio trovare file più recenti di 15 secondi ma più vecchi di 2 secondi. Ecco lo script che sto attualmente utilizzando che acquisisce file più recenti di 15 secondi:

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

Qualsiasi aiuto è molto apprezzato


2
Quale sistema operativo stai usando? Ci sono differenze nelle findimplementazioni.
terdon

Un file modificato esattamente 2 secondi fa dovrebbe corrispondere? Che dire di un file modificato esattamente 15 secondi fa?
Mikel,

Più di 2 secondi al momento dell'inizio dello script o al termine?
Stéphane Chazelas,

@Mikel, questo è probabilmente irrilevante poiché gli orologi hanno una risoluzione di nanosecondi al giorno d'oggi.
Stéphane Chazelas,

1
Ok ... dato che nessun altro lo sta chiedendo ... @ Yllier123 perché devi trovare i file creati tra 2 <x <15 sec? Sono solo curioso.
C Bauer,

Risposte:


17

È possibile combinare più predicati concatenandoli.

Non c'è -oldermt, ma puoi scriverlo come -not -newermt.

Tu vuoi:

  • -newermt '-15 seconds' per dire che il file ha meno di 15 secondi e
  • -not -newermt '-2 seconds' per dire che il file ha più di 2 secondi

Provare:

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

Oppure, per essere conforme a POSIX:

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

Inoltre, solo per questo che tu (e altri lettori) siete consapevoli, "più recente" significa modificato più recentemente di, non creato più di recente.


3
Bello. Nota che -not -newermt '-2 seconds'corrisponderà anche ai file esattamente 2 secondi precedenti. Utilizzare -not -newermt '3 seconds'per escludere anche quelli.
terdon

1
Sì, i casi limite sono sempre divertenti. In realtà non sono sicuro di quale risoluzione utilizzi per questi confronti. La mia ipotesi è che tutto ciò che è stato modificato ~ 2.000000001 secondi fa sia una corrispondenza, ma ciò dipenderebbe anche dal file system e dal sistema operativo.
Mikel,

Bene, non ho idea di quale sia la risoluzione. Ho appena provato touch -d "2 seconds ago" file; find . -newermt '-15 seconds' -not -newermt '-2 seconds'e ottenuto file.
terdon

@terdon Bene, dipende dal fatto che i timestamp abbiano una risoluzione più precisa di un secondo; che dipenderà dal sistema, il file system, e potrebbe anche variare tra file sullo stesso file system se usato da più macchine diverse.
Blacklight Shining,

"più recente" significa "più recentemente di". È la "m" che significa "modificato".
OrangeDog,

4

Non hai menzionato il tuo sistema operativo ....

Funziona bene con un'implementazione di ricerca moderna come quella di FreeBSD o con sfind.

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

Sfind fa parte degli strumenti di Schily: http://sourceforge.net/projects/schilytools/files/

ATTENZIONE: ho appena scoperto un problema in sfind. Se gli -mtimeargomenti sono inferiori a 60 secondi, non funzionerà correttamente poiché i tempi dei file sono attualmente confrontati con un timestamp di 60 secondi in futuro che è stato originariamente calcolato per il cambio di anno -ls.

A proposito: -notnon appartiene a find, è un GNUismo non portatile.


1
C'è il bashtag ... Quindi l'ambiente potrebbe essere Cygwin, Debian GNU / Hurd, in bashesecuzione su FreeBSD o Solaris, ... ;-)
phk,

Per GNU find, sembra che i decimali, sebbene pazzi, possano essere usati come soluzione alternativa.
Arthur2e5,

POSIX find ha !per -not as! expression . Quindi, non è un grosso problema.

@phk È per questo che ho detto il metodo che funziona con uno standard avanzato primaryda findper informare le persone che non v'è nessuna necessità di aggiungere sempre nuovi primariesdi trovare per essere in grado di migliorare la funzionalità. A proposito: un problema fisso libfindè stato pubblicato nel schily tools.
schily,

@BinaryZebra il problema è che gfindha aggiunto l' -notalias. Non è mai stato necessario e la sua presenza può essere vista come un blocco del fornitore nella strategia.
schily,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.