Trova i file a cui è stato effettuato l'accesso dopo la loro creazione


3

Con il comando find è facile trovare file che sono stati modificati o accessibili in un determinato periodo.

Quando viene creato un file, il tempo di accesso è uguale al tempo di modifica. Ma non appena si accede (leggi), il tempo di accesso cambia, ma il tempo di modifica no.

Devo trovare i file a cui è stato effettuato l'accesso, ad es. file con tempi di accesso più recenti di quelli di modifica.

Come lo faccio?

Risposte:


2

Questo dovrebbe funzionare:

find -type f -print0 | xargs -0 -I % find -path % -anewer %

Funziona benissimo! Puoi spiegare come funziona?
marlar

A proposito, nel frattempo ho costruito questo brutto comando: trova. -exec sh -c "stat {} | awk --re-intervallo '/ File: / {file = \ $ 2} / (Accesso | Modifica): [0-9] {4} / {if (\ $ 1 == \ "Accesso: \") access = \ $ 3; else change = \ $ 3} END {if (access! = Modifica) stampa file} '"\;
marlar,

@marlar: trova tutti i file quindi li invia tramite xargsun altro findche confronta il tempo di accesso con il proprio tempo modificato. Si -I %comporta come una variabile che contiene il nome file e viene usata due volte nel secondo comando find. Se ci sono molti file, potrebbe essere lento dato che li attraversa due volte.
Dennis Williamson,

2

Non penso che ci sia un modo per farlo in un unico attraversamento con GNU find (figuriamoci POSIX find). È un semplice one-liner con Perl File::Find:

perl -MFile::Find -e 'find({wanted => sub {print "$File::Find::name\n" if -f && -M _ > -A _}}, @ARGV);' .

Assicurati che i tuoi file siano montati senza l' opzione noatimeo relatime- le recenti distribuzioni Linux tendono ad usarlo per impostazione predefinita.

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.