Il comando find presente sui sistemi linux è estremamente potente, e può essere utilizzato con molteplici scopi.
Uno di essi è quello di ottenere liste di file arricchite di dettagli quali data ora di creazione, modifica e accesso.
Si può usare a tale scopo lo switch -printf che permette di definire l'output del comando. Esempio:
find / -name "*.html" -printf "%p\t%f\t%Ad/%Am/%AY\t%Cd/%Cm/%CY\t%Td/%Tm/%TY\n"
Elenca tutti i file con estensione html su 5 colonne separate dal tabulatore (\t)
Le 5 colonne sono determinate da:
%p pathname completo del file
%f nome del file
%Ad/%Am/%AY data di accesso del file (gg/mm/yyyy)
%Cd/%Cm/%CY data di creazione del file (gg/mm/yyyy)
%Td/%Tm/%TY data di modifica del file (gg/mm/yyyy)
la stringa di formato termina con un \n per andare a capo.
Se si vuol cercare una stringa all'interno di tutti i file rispondenti a un certo pattern (es. pippo*), si può usare il seguente comando:
find . -name pippo* | sed -e s/.*/\""&"\"/ | xargs | grep "STRINGA DA CERCARE"
Il risultato è l'elenco dei file che contengono la stringa indicata.
i pipe con sed e xargs servono per redirigere l'output di find a grep, sed viene usato per inserire le doppie virgolette " all'inizio e alla fine di ogni riga proveniente da find, altrimenti xargs spezzerebbe i nomi dei file che contengono spazi.
Meglio ancora se si utilizza l'opzione -print0 per find in combinazione con lo switch -0 di xargs. Es:
find . -name pippo* -print0 | xargs -0 grep "STRINGA DA CERCARE"
Se si vuole modificare i permessi dei soli file di un sottoalbero (lasciando inalterati quelli delle directory) si può usare: find . -type f -exec chmod 777 '{}' \;
dove:
-type f dice che si cercano i soli file
-exec esegue il comando specificato su tutti i file individuati (si specifica il file con le graffe aperte e chiuse), il \; termina il comando