back to top

Linux find: cercare tra i file

In questa lezione vedremo come effettuare delle ricerche per trovare file e/o directory all’interno del nostro file system. Per fare ciò Linux dispone di diversi comandi; in questa lezione della nostra guida vedremo come funzionano e a cosa servono i tre principali per la ricerca tra i file del sistema operativo: find, locate e grep.

In particolare, questa guida si concentra sul comando Linux find per effettuare ricerche all’interno del filesystem attraverso l’utilizzo di diversi fattori e criteri di ricerca.

Pubblicità

Il comando find è molto potente e flessibile, permettendo di cercare file in base a molteplici condizioni. Tuttavia, è importante notare che può risultare piuttosto lento nel restituire i risultati, specialmente su dischi contenenti un gran numero di file e cartelle.

Premessa

Il comando find di Linux consente di ricercare file e directory in base al nome, alla data di creazione o modifica, alle dimensioni e altri parametri. Prima di procedere con esempi pratici, assicuriamoci di avere una comprensione di base della sintassi del comando.

Vediamo come usare il comando find di Linux in diverse situazioni ed esigenze.

Utilizzare find per cercare in base al nome

Se volessimo cercare in base al nome, useremo l’opzione -name, nel seguente modo:

find /directory/dove/cercare/ -name file_da_cercare

Ad esempio, se volessimo cercare in tutta la macchina tutti i file che si chiamano “pippo.jpg”, useremo:

find / -name "pippo.jpg"

Attenzione: in questo modo la ricerca è case sensitive, cioè distingue tra minuscole e maiuscole. Se volessimo effettuare una ricerca che non consideri questa differenza, dovremo utilizzare l’opzione -iname (che si dice, appunto, case insensitive).

find / -iname "pippo.jpg"

In questo modo otterremo anche risultati come “Pippo.jpg” o “PIPPO.jpg”.

Si noti che find supporta anche il carattere speciale asterisco (* o wildcard) che consente di indicare “qualsiasi stringa”. Ad esempio:

find / -name "*.jpg"

Questo comando consente di trovare tutti i file che hanno come estensione JPG.

Interessante anche l’opzione -not, che consente di invertire l’esito di una ricerca. Si supponga, ad esempio, di voler trovare tutti i file che hanno un’estensione diversa da JPG:

find / -not -name "*.jpg"

Utilizzare find per cercare in base alla data di creazione o modifica

Se volessimo cercare in base alla data di creazione del file, useremo l’opzione -ctime (Last Change Time) seguita dall’età (espressa in giorni) del file da cercare.

find /directory/dove/cercare/ -ctime età_in_giorni

Ad esempio, se volessimo cercare nella directory /home/web/miosito/ un file creato o modificato 7 giorni fa, useremo:

find /home/web/miosito/ -ctime 7

Per trovare file e cartelle più vecchi di 7 giorni, useremmo:

find /home/web/miosito/ -ctime +7

Per trovare file e cartelle con meno di 7 giorni, useremmo:

find /home/web/miosito/ -ctime -7

Oltre a -ctime, esistono altre due opzioni interessanti per le ricerche basate sulle date: -atime (Last Access Time) e -mtime (Last Modification Time). La prima opzione consente di cercare file in base all’ultima data di accesso, mentre la seconda considera solamente il file stesso.

È importante notare che la differenza tra -ctime e -mtime sta nel fatto che la prima opzione considera anche i cambiamenti nei metadati (ad esempio utente o gruppo proprietario) mentre il secondo si concentra sulle modifiche ai contenuti del file.

Utilizzare find per cercare in base alla dimensione

Se, per finire, volessimo cercare in base al peso del file useremo l’opzione -size seguita dalla dimensione in Kb. Così facendo, find restituirà tutti i file di dimensione uguale o superiore alla misura indicata.

find /directory/dove/cercare/ -size dimensione_del_file

Ad esempio, se volessimo cercare nella directory /home/web/miosito/fotografie/ tutti i file con dimensione esatta di 100 Kb scriveremo:

find /home/web/miosito/fotografie/ -size 100k

Se, viceversa, cercassimo file più piccoli di 100 Kb utilizzeremmo:

find /home/web/miosito/fotografie/ -size -100k

Per cercare file più grandi di 100 Kb, scriveremo:

find /home/web/miosito/fotografie/ -size +100k

Come potete vedere, la dimensione è espressa da un numero seguito dall’unità di misura. Le unità di misura accettate da find sono le seguenti:

  • b: 512-byte blocks (default)
  • c: bytes
  • w: two-byte words
  • k: Kilobytes
  • M: Megabytes
  • G: Gigabytes

Trovare file di grandi dimensioni

A volte è necessario fare un po’ di pulizia all’interno del proprio computer, magari per liberare spazio da un hard disk sempre più intasato di file. Il modo più semplice per liberare spazio è quello di eliminare file di grandi dimensioni non più utili o comunque troppo ingombranti.

Per trovare i file di grandi dimensioni all’interno del nostro OS Linux, non dovremo far altro che utilizzare find nel modo appena visto, specificando un valore molto grande:

find / -size +100M

Attraverso il comando find e l’opzione -size, abbiamo chiesto al sistema di elencare tutti i file di dimensioni maggiori di 100 Mb.

Volendo possiamo anche filtrare i risultati escludendo dal listato certe tipologie di file, ad esempio:

find / -size +100M -not -name "*.mp4"

Con questa istruzione otterremo un elenco di file con dimensioni maggiori di 100Mb, escludendo i file .mp4.

Ordinare i risultati in base alla dimensione del file

Come avrete notato, il comando find non ordina i risultati secondo il criterio a noi più utile. Sarebbe comodo, infatti, che i file trovati venissero ordinati dal più grande al più piccolo.

Per ottenere questo risultato abbiamo bisogno di utilizzare un’istruzione più complessa:

find / -size +100M -exec ls -sh {} ; | sort -n -r | head -10

In pratica, abbiamo lanciato find e poi, attraverso exec, il comando ls. Dei risultati ottenuti abbiamo fatto il sorting e poi abbiamo limitato la visualizzazione ai primi 10 risultati.

Utilizzare find per trovare file e cartelle di uno specifico utente

Per fare questo tipo di ricerca utilizzeremo -user nel seguente modo:

find /directory/dove/cercare/ -user nome_dell_utente

Utilizzare find per scovare file e cartelle vuote

Un altro interessante utilizzo di find consiste nella capacità di trovare file e directory vuote. Per farlo useremo questa sintassi:

find /directory/dove/cercare/ -empty

Se volessimo limitare la ricerca alle sole cartelle, aggiungeremo -type seguito dal valore “d” (che indica le directory):

find / -type d -empty

Per cercare solo file, useremo, invece, il valore “f”:

find / -type f -empty

Limitare la profondità della ricerca

Come detto, le ricerche con find possono essere piuttosto lente; per questo motivo, può essere utile limitare la profondità della ricerca. A tal fine si ricorre a -maxdepth seguito dal numero di livelli in cui cercare.

Se volessimo cercare solo nella cartella corrente (e non anche nelle sue eventuali sotto-cartelle), utilizzeremo:

find . -maxdepth 1 -name "pippo.jpg"

Con questo comando cercheremo i file che si chiamano “pippo.jpg” solo nella cartella corrente.

Cancellare i file trovati con find

Un altro comodo utilizzo di find riguarda la cancellazione di file. Si supponga, ad esempio, di voler trovare e cancellare i file temporanei (contraddistinti da estensione “.temp”).

Per farlo ricorreremo a questa sintassi:

find / -name "*.temp" -delete

Come potete vedere, si tratta di una semplice ricerca al cui termine viene aggiunta l’istruzione -delete.

Pubblicità
Massimiliano Bossi
Massimiliano Bossi
Stregato dalla rete sin dai tempi delle BBS e dei modem a 2.400 baud, ho avuto la fortuna di poter trasformare la mia passione in un lavoro (nonostante una Laurea in Giurisprudenza). Adoro scrivere codice e mi occupo quotidianamente di comunicazione, design e nuovi media digitali. Orgogliosamente "nerd" sono il fondatore di MRW.it (per il quale ho scritto centinaia di articoli) e di una nota Web-Agency (dove seguo in prima persona progetti digitali per numerosi clienti sia in Italia che all'estero).