Find, cose utili da sapere

Mi ricordo ancora il mio primo incontro con find, una decina di anni fa su una workstation SUN. Fu piuttosto traumatico ๐Ÿ™‚
Poi con il tempo ho imparato ad apprezzare la potenza di find soprattutto quando locate, tools come tracker o il "cagnolino-che-cerca-scavando" di Windows XP non ce la fanno ๐Ÿ™‚

Poniamo di avere questi files nella directory "mieiFiles":

Amelia.jpg
Paperino.txt
Pippo
PippoFranco.mp3

Vogliamo trovare tutti i files con nome che comincia per Pippo:

giambo@deimos:~$ find mieiFiles -name Pippo*
mieiFiles/Pippo
mieiFiles/PippoFranco.mp3

L’opzione "-name" specifica il tipo di ricerca (Per nome del file, appunto). Se usiamo "-iname", la ricerca non sara’ case-sensitive:

giambo@deimos:~$ find mieiFiles/ -iname piPPo*mP3
mieiFiles/PippoFranco.mp3

Le opzioni "-mmin n" e "-mtime n" permettono di cercare per files modificati esattamente n minuti fa e rispettivamente n giorni fa.
Non e’ molto utile come ricerca, ecco perche’ aggiungendo il simbolo "+" o "-" davanti a n, possiamo cercare i files modificati piu’ di n minuti/giorni fa e rispettivamente meno di n minuti/giorni fa:

Quindi, i files modificati piu’ di 5 minuti fa sono:

giambo@deimos:~$ find mieiFiles/ -mmin +5
mieiFiles/Paperino.txt
mieiFiles/Amelia.jpg
mieiFiles/PippoFranco.mp3

Mentre quelli modificati meno di 5 minuti fa sono:

giambo@deimos:~$ find mieiFiles/ -mmin -5
mieiFiles/
mieiFiles/Pippo

Nell’ultimo esempio viene conteggiata pure la directory corrente. Infatti ho omesso di scrivere che find cerca sia i files che le directories che i links, … ๐Ÿ™‚
Per restringere la ricerca a soli files, si puo’ usare l’opzione "-type", seguita da "f" per files e "d" per directories (Altre opzioni sono spiegate nella man-page):

giambo@deimos:~$ find mieiFiles/ -type f -mmin -5
mieiFiles/Pippo

Possiamo affinare la ricerca aggiungendo come parametro la grandezza del file, usando l’opzione "-size", seguita da un numero e da una lettera che ne determino l’unita’ di misura.
Per esempio per avere tutti i "Pippi" con dimensione minore (-) di 1 (1) byte (c):

giambo@deimos:~$ find mieiFiles/ -type f -size -1c -name Pippo*
mieiFiles/Pippo

Mentre tutti i files con dimensione maggiore (+) di 3 (3) megabyte (M)

giambo@deimos:~$ find mieiFiles/ -type f -size +3M
mieiFiles/PippoFranco.mp3

Altre opzioni utili sono "-user" per i files appartenenti ad un certo utente e "-group" per un certo gruppo:

giambo@deimos:~$ find mieiFiles/ -user giambo
mieiFiles/
mieiFiles/Pippo
mieiFiles/Paperino.txt
mieiFiles/Amelia.jpg
mieiFiles/PippoFranco.mp3

Bene, ma una volta che ho trovato i files, se volessi farci qualcosa ? Qui entra in gioco l’opzione "-exec", che permette di specificare un comando da eseguire su ogni file trovato:

giambo@deimos:~$ find mieiFiles/ -user giambo -exec grep -i david {} \;
Viva Davidonzo ๐Ÿ˜€ !!

Le parentesi "{}" significano "ogni file trovato", mente "\;" e’ necessario per indicare la fine del comando da eseguire. Ecco qua, abbiamo unito Grep e Find … mica male, no ๐Ÿ˜‰ ?

One thought on “Find, cose utili da sapere”

  1. find è un comando potentissimo, come del resto la maggior parte degli "ostici" comandi da consolle. Se poi si aggiunge il fatto che questi possono essere combinati fra loro, o che si possono integrare con la programmazione bash per ottenere cose meravigliose… il cielo è il limite!

Comments are closed.