Come utilizzare “trova” per cercare i file creati in una data specifica?

Come utilizzare il comando UNIX find per cercare i file creati in una data specifica?

Come sottolineato da Max, non è ansible, ma il controllo dei file modificati o l’accesso non è poi così difficile. Ho scritto un tutorial su questo, fino a oggi. L’essenza di ciò è usare -newerXY e ! -newerXY ! -newerXY :

Esempio: per trovare tutti i file modificati il ​​7 giugno 2007:

 $ find . -type f -newermt 2007-06-07 ! -newermt 2007-06-08 

Per trovare tutti i file accessibili il 29 settembre 2008:

 $ find . -type f -newerat 2008-09-29 ! -newerat 2008-09-30 

Oppure, i file con la loro authorization sono stati modificati lo stesso giorno:

 $ find . -type f -newerct 2008-09-29 ! -newerct 2008-09-30 

Se non si modificano le autorizzazioni sul file, tuttavia, “c” normalmente corrisponde alla data di creazione.

find location -ctime time_period

Esempi di tempo_period:

  • Più di 30 giorni fa: -ctime +30

  • Meno di 30 giorni fa: -ctime -30

  • Esattamente 30 giorni fa: -ctime 30

Sono due passaggi ma mi piace farlo in questo modo:

Prima crea un file con una data / ora particolare. In questo caso, il file è 2008-10-01 a mezzanotte

 touch -t 0810010000 /tmp/t 

Ora possiamo trovare tutti i file più recenti o precedenti rispetto al file precedente (andando alla data di modifica del file. Puoi anche usare -anewer per accedere e lo stato dei file -cnewer è cambiato).

 find / -newer /tmp/t find / -not -newer /tmp/t 

Puoi anche guardare i file tra determinate date creando due file con il touch

 touch -t 0810010000 /tmp/t1 touch -t 0810011000 /tmp/t2 

Questo troverà i file tra le due date e ore

 find / -newer /tmp/t1 -and -not -newer /tmp/t2 

Potresti fare questo:

 find ./ -type f -ls |grep '10 Sep' 

Esempio:

 [[email protected] etc]# find /var/ -type f -ls | grep "Dec 24" 791235 4 -rw-r--r-- 1 root root 29 Dec 24 03:24 /var/lib/prelink/full 798227 288 -rw-r--r-- 1 root root 292323 Dec 24 23:53 /var/log/sa/sar24 797244 320 -rw-r--r-- 1 root root 321300 Dec 24 23:50 /var/log/sa/sa24 

Non puoi L’opzione -c ti dice quando le autorizzazioni sono state modificate l’ultima volta, -una verifica il tempo di accesso più recente e -m verifica l’ora di modifica. Il filesystem utilizzato dalla maggior parte dei sapori di Linux (ext3) non supporta un record di “tempo di creazione”. Scusate!

@ Max: ha ragione circa il tempo di creazione.

Tuttavia, se si desidera calcolare l’argomento dei giorni trascorsi per uno dei -atime , -ctime , -mtime , è ansible utilizzare la seguente espressione

 ELAPSED_DAYS=$(( ( $(date +%s) - $(date -d '2008-09-24' +%s) ) / 60 / 60 / 24 - 1 )) 

Sostituisci “2008-09-24” con qualsiasi data desideri e ELAPSED_DAYS verrà impostato sul numero di giorni tra oggi e oggi. (Aggiornamento: sottrai uno dal risultato per allinearlo con l’arrotondamento alla data di trova.)

Quindi, per trovare qualsiasi file modificato il 24 settembre 2008, il comando sarebbe:

 find . -type f -mtime $(( ( $(date +%s) - $(date -d '2008-09-24' +%s) ) / 60 / 60 / 24 - 1 )) 

Questo funzionerà se la tua versione di find non supporta i predicati -newerXY menzionati nella risposta di @Arve :.

Con le opzioni -atime, -ctime e -mtime da trovare, puoi avvicinarti a ciò che desideri ottenere.

 cp `ls -ltr | grep 'Jun 14' | perl -wne 's/^.*\s+(\S+)$/$1/; print $1 . "\n";'` /some_destination_dir 

Ho trovato questo script in uno script che elimina tutti i file più vecchi di 14 giorni:

 CNT=0 for i in $(find -type f -ctime +14); do ((CNT = CNT + 1)) echo -n "." >> $PROGRESS rm -f $i done echo deleted $CNT files, done at $(date "+%H:%M:%S") >> $LOG 

Penso che un piccolo “ritrovamento uomo” aggiuntivo e la ricerca dei parametri -ctime / -atime ecc. Ti aiuteranno qui.