Come si usa il comando UNIX find
per cercare i file creati in una data specifica?
Come si usa il comando UNIX find
per cercare i file creati in una data specifica?
Risposte:
Come sottolineato da Max, non puoi, ma controllare i file modificati o accessibili non è poi così difficile. Ho scritto un tutorial su questo, fino ad oggi. La cui essenza è usare -newerXY
e ! -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 che hanno avuto il loro permesso sono cambiati lo stesso giorno:
$ find . -type f -newerct 2008-09-29 ! -newerct 2008-09-30
Se non si modificano le autorizzazioni per il file, 'c' normalmente corrisponderebbe alla data di creazione.
-newerBt
corrisponderanno al momento della nascita (creazione) del file .
-newerxt
è disponibile su FreeBSD dal 2001 (dove è stato fornito per la prima volta come patch nel 1998), alcuni altri BSD e GNU trovano (dal 4.3.3 nel 2007), basato su HP / UX find, che ha introdotto -newerXY
(ma dove Y == t non è supportato).
find location -ctime time_period
Esempi di time_period:
Più di 30 giorni fa: -ctime +30
Meno di 30 giorni fa: -ctime -30
Esattamente 30 giorni fa: -ctime 30
ctime
non ha nulla a che fare con il tempo di creazione , è il tempo di cambio dell'inode.
Sono due passaggi ma mi piace farlo in questo modo:
Innanzitutto crea un file con una data / ora particolare. In questo caso, il file è 01/10/2008 a mezzanotte
touch -t 0810010000 /tmp/t
Ora possiamo trovare tutti i file più recenti o più vecchi del file sopra (andando per data di modifica del file. Puoi anche usare -anewer per l'accesso e -cnewer lo stato del file è cambiato).
find / -newer /tmp/t
find / -not -newer /tmp/t
Puoi anche guardare i file tra determinate date creando due file con il tocco
touch -t 0810010000 /tmp/t1
touch -t 0810011000 /tmp/t2
Questo troverà i file tra le due date e orari
find / -newer /tmp/t1 -and -not -newer /tmp/t2
find
che manca-newerXY
Potresti farlo:
find ./ -type f -ls |grep '10 Sep'
Esempio:
[root@pbx 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
stat
se non ce l'hai find -printf
.
Non puoi. L'opzione -c indica quando sono state modificate le autorizzazioni l'ultima volta, -a verifica il tempo di accesso più recente e -m verifica il tempo di modifica. Il filesystem utilizzato dalla maggior parte delle versioni di Linux (ext3) non supporta un record "tempo di creazione". Scusa!
@Max: ha ragione sui tempi di creazione.
Tuttavia, se si vuole calcolare l'argomento giorni trascorsi per una delle -atime
, -ctime
, -mtime
i parametri, è possibile utilizzare la seguente espressione
ELAPSED_DAYS=$(( ( $(date +%s) - $(date -d '2008-09-24' +%s) ) / 60 / 60 / 24 - 1 ))
Sostituisci "2008-09-24" con la data che desideri e ELAPSED_DAYS verrà impostato sul numero di giorni tra allora e oggi. (Aggiornamento: sottrarre uno dal risultato per allinearlo con find
l'arrotondamento della data.)
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 -newerXY
predicati citati nella risposta di @Arve :.
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 po '"man find" aggiuntivo e la ricerca dei parametri -ctime / -atime ecc. Ti aiuteranno qui.