Come posso specificare un intervallo di date per il comando find su OSX?


4

Devo trovare i file entro un intervallo di date al minuto. Suppongo che sapere come farlo per il secondo potrebbe essere utile un giorno. Comunque. Ho imparato a usare -newermt e anche -not -newermt; tuttavia, non riesco a ottenere risultati corretti quando li combino. Ho trovato degli esempi di Linux sull'utilizzo di find, ma non penso che gli switch stiano funzionando su OSX. Guarda il seguente elenco di file:

#$ ls -l
total 32
-rw-r--r--  1 testuser  staff  1024 Oct 26 20:12 test1.swc
-rw-r--r--  1 testuser  staff     0 Oct 26 19:00 test1_old.swc
-rw-r--r--  1 testuser  staff  1024 Oct 26 20:12 test2.swc
-rw-r--r--  1 testuser  staff     0 Oct 26 19:00 test2_old.swc
-rw-r--r--  1 testuser  staff  1024 Oct 26 20:12 test3.swc
-rw-r--r--  1 testuser  staff     0 Oct 26 19:00 test3_old.swc
-rw-r--r--  1 testuser  staff  1024 Oct 26 20:12 test4.swc
-rw-r--r--  1 testuser  staff     0 Oct 26 19:00 test4_old.swc
-rw-r--r--  1 testuser  staff     0 Oct 26 20:11 test5.swc
-rw-r--r--  1 testuser  staff     0 Oct 26 20:13 test6.swc
-rw-r--r--  1 testuser  staff     0 Oct 26 19:00 timestamp.tmp

Mi aspetto che il seguente comando restituisca test1.swc tramite test4.swc; tuttavia, si noti che ha restituito test6.swc:

#$ find . -newermt '2010-10-26 20:11' -a -not -newermt '2010-10-26 20:13'
./test1.swc
./test2.swc
./test3.swc
./test4.swc
./test6.swc

Ho pensato che il minuto per la non-condizione era spento, quindi ho provato il seguente, ma non ha restituito nulla:

#$ find . -newermt '2010-10-26 20:11' -a -not -newermt '2010-10-26 20:12'
#$ 

Ho concluso che non sto combinando correttamente le opzioni -newermt e -not -newermt. Qualche consiglio su come correggere questo?

Risposte:


5

La tua sintassi sembra corretta. Come hai creato questi file. Ho visto il ritorno sbagliato quando ho usato il tocco per aggiornare la data.

In BSD -a non è necessario, e io tendo ad usare! invece di -not (perferenza personale)

Durante la ricerca del comando help ricorda che vuoi cercare BSD, perché ci sono alcune differenze che uso Pagine man di FreeBSD

Ricorda che sul file c'è qualcosa che va oltre i minuti, quindi se vuoi il primo secondo, devi contrassegnarlo. Ho creato una struttura come la tua e quando ho aggiunto il: 00 per i secondi ho potuto ottenere gli stessi risultati che avevi, dove non aveva senso. così ho fatto un ls -lT e sono stato in grado di vedere i secondi sul file e poi ho eseguito il comando find e ho ottenuto i risultati attesi per impostazione predefinita il! oppure -non imposta i secondi su 59 in modo che includa l'intero minuto.

#$ find . -newermt "2010-10-26 20:11:00" ! -newermt "2010-10-26 20:13:00"

Anche questo non restituisce nulla sul mio set di file. Ho creato i file usando touch -mt. L'ultimo file, test6.swc è stato creato un po 'più tardi rispetto agli altri, ma con il seguente: touch -mt 201010262013 test6.swc Ancora è elencato nel set di risultati se utilizzo: find. -newermt "2010-10-26 20:11"! -newermt "2010-10-26 20:13", che suggerisce che forse anche la sintassi da te suggerita sta fallendo (non penso che il tempo dovrebbe essere 20:12 sulla condizione "!", penso che dovrebbe essere 20 : 13)
Michael Prescott

Scusate, ho modificato il post, avevo due versioni su cui stavo lavorando e ho copiato quello sbagliato.
Robert Leckie

Grazie per l'aiuto. Usando il tuo esempio e un nuovo set di file ho trovato il problema. Ho creato un nuovo set di file con touch -mt 201010262010 test1_new.swc test2_new.swc test3_new.swc test4_new.swc e touch -mt 201010262011 test5_new.swc. Quindi ho eseguito il comando: find. -newermt "2010-10-26 20:10"! -newermt "2010-10-26 20:11", che ha restituito solo test5_new.swc, anziché il desiderato da 1 a 4. Tuttavia, quando ho usato, trova. -newermt "2010-10-26 20:09:59"! -newermt "2010-10-26 20:10:59" Ho ottenuto i risultati che mi aspettavo.
Michael Prescott
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.