Vuoi sapere come trovare file o cartelle da terminale? Su Linux possiamo usare il comando find per fare delle ricerche davvero molto specifiche.
In questa guida vedremo come usare il comando find per riuscire a trovare file in base al tipo (cartelle, file, link simbolici), all’estensione, con corrispondenze parziali o esatte del nome e tanti altri parametri. Come? Grazie alle molteplici opzioni di questo comando!
Table of Contents
Sintassi del comando find
Il comando find ci permette di trovare file e cartelle da terminale. Questo comando può essere utilizzato sia per trovare file e cartelle in base a corrispondenze nel nome che utilizzando altri parametri tra cui (ma non solo) la dimensione del file o la data di modifica.
La sintassi di base del comando find è questa:
find [percorso] [opzioni] [argomento opzione]
Per esempio, per cercare un file che corrisponda a un nome preciso possiamo usare il comando in questo modo:
find . -name "file.txt"
Questo comando andrà a cercare nella cartella corrente un file che corrisponde al nome indicato “file.txt”.
In questo articolo vedremo numerosi altri esempi che ti permetteranno di capire come usare al meglio il comando find e le sue opzioni.
Casi d’uso del comando find
Vediamo come usare nella pratica il comando find e le sue opzioni per fare una ricerca di file o cartelle che corrispondono a determinate caratteristiche. Vedremo come fare a cercare file per nome esatto o parziale, e poi anche per dimensione, permessi impostati e altri parametri.
Trovare un file per nome
Uno dei primi utilizzi che andiamo a vedere è usare il comando find per fare una ricerca di un file di cui conosciamo il nome.
Per farlo, l’opzione da usare è -name.
Il comando si usa in questo modo:
find . -name "file.txt"

Analizziamo questo comando:
- indicando “
.” stiamo chiedendo di effettuare la ricerca solo nella cartella corrente (è opzionale, ma l’ho inserito per aiutarti a capire che è lì che puoi specificare il percorso in cui cercare). - Dopo l’opzione 
-namespecifichiamo il nome del file indicato tra virgolette “[nome-file]”. 
Una cosa importante da sapere è che la ricerca verrà effettuata sul nome esatto. Cosa vuol dire? Non verranno restituiti risultati che non corrispondono esattamente, bisogna quindi indicare anche correttamente minuscole e maiuscole.
Se non siamo sicuri del nome esatto del file e in particolare siamo indecisi riguardo ai caratteri maiuscoli e minuscoli, possiamo far sì che la ricerca non consideri maiuscole e minuscole, in questo modo:
find . -iname "file.txt"
L’opzione -iname ci permette di fare una ricerca senza considerare maiuscole o minuscole.
Ecco un esempio che ti mostra come l’output cambia se usiamo -name o -iname.
 - Nel primo caso, con 
-name, stiamo facendo una ricerca esatta, quindi verranno mostrati solo i file con nome “file.txt” (tutto in minuscolo). - Nel secondo, con 
-iname, non vengono considerate le minuscole e le maiuscole, quindi la ricerca mostra anche “File.txt” (con iniziale maiuscola) e avrebbe mostrato anche un ipotetico elemento rinominato “fiLE.txt”. 
Trovare un file conoscendo parte del nome
La maggior parte delle volte in cui ci serve ritrovare un file, non ricordiamo esattamente come lo abbiamo salvato. In queste circostanze ci viene in aiuto la ricerca con il carattere wildcard * che rappresenta un numero variabile di caratteri. Il wildcard è molto utile per fare operazioni sui file con diversi comandi Linux, non solo in questo caso.
Per esempio se vogliamo cercare tutti i file (e le cartelle) che iniziano per “articolo” (e non considerare differenze tra maiuscole e minuscole) possiamo fare in questo modo:
find . -iname "articolo*"

Nel nostro esempio qui sotto, con questa ricerca abbiamo trovato sia file (indicati dalla linea verde) che cartelle (linea rossa) che hanno il nome che inizia per “articolo”.
Ricerca in un percorso specifico
Negli esempi precedenti abbiamo avviato la ricerca di file e cartelle nella cartella corrente specificando come percorso “.”.
Quando usiamo il comando find possiamo, infatti, eseguire la ricerca in una cartella specifica.
Per esempio, per fare una ricerca nella “/home” andremo a indicarne il percorso in questo modo:
find /home -name "nuovo.txt"
 La ricerca verrà effettuata nella directory home (e nelle varie sottocartelle) come si può vedere in questo esempio.
Per fare una ricerca in qualsiasi percorso, quindi, ci basta indicarlo per esteso, così:
find [percorso] -name "nome-file"
Nel nostro esempio abbiamo usato il comando:
find /home/vbox/Documenti/SupportHost/articoli/ -name "nuovo.txt"

In questo modo, stiamo facendo la ricerca solo nella sottocartella “articoli” presente al percorso specificato.
Nota: la ricerca parte dalla cartella del percorso indicato e procede anche nelle sue sottocartelle.
Ricercare per tipo di file
Possiamo utilizzare il comando find per fare una ricerca solo tra alcuni tipi di file. Immaginiamo per esempio di voler trovare tutti i file con estensione “.jpg” presenti in un determinato percorso.
Per farlo possiamo usare il wildcard come nell’esempio di prima per la corrispondenza non esatta.
In questo caso il nostro comando sarà:
find -name "*.jpg"

Il risultato sarà qualsiasi file in formato jpeg.
Restringere la ricerca a file, cartelle o link
Come abbiamo visto negli esempi fatti finora, quando andiamo a usare il comando find, la ricerca verrà effettuata su tutti i tipi di file che su Linux includono file, directory e link simbolici.
Se ci serve fare una ricerca dettagliata solo tra uno di questi tipi, ci basta usare l’opzione -type seguita dal tipo di file.
Per cercare solo tra i file:
find -type f
Per fare una ricerca solo tra cartelle:
find -type d
Per fare una ricerca solo tra link simbolici:
find -type l
In questo esempio puoi vedere i tre comandi in azione:
- nel primo caso vengono mostrati solo i file (abbiamo diverse tipologie degli archivi e dei file txt);
 - nel secondo vengono mostrate le directory, nel nostro esempio c’è una sola cartella;
 - nel terzo, viene mostrato l’unico link simbolico trovato in quel percorso.
 
 Nota: per rendere l’esempio più esplicativo, ho usato il comando ls con l’opzione l per mostrare il contenuto della cartella.
Trovare file e cartelle vuote
Possiamo combinare due opzioni per trovare file o cartelle vuote. Le opzioni di find che useremo sono -type (che abbiamo visto prima) e -empty.
Per trovare solo i file vuoti, facciamo così:
find -type f -empty
Per trovare le cartelle vuote:
find -type d -empty

Se, invece, vogliamo trovare elementi vuoti sia file che cartelle, ci basterà usare il comando find con l’opzione -empty, così:
find -empty
Ricercare file per data di modifica (o di ultimo accesso)
Ci sono diverse opzioni del comando find che ci aiutano a fare ricerche dettagliate in base all’ultima volta che il file è stato aperto (ultimo accesso) o modificato (ultima modifica).
In questa tabella abbiamo riassunto le opzioni con la descrizione.
Opzione del comando find  | Descrizione  | Esempio  | Output dell’esempio  | 
|---|---|---|---|
-atime n | Permette di cercare i file a cui è stato fatto accesso negli ultimi giorni partendo da n che rappresentano le ultime 24 ore. Per esempio -atime +1 andrà a cercare i file a cui è stato fatto accesso 2 giorni fa.  | Esempio:  find -atime +1 | Risultato: mostra i file a cui è stato fatto accesso fino a due giorni fa.  | 
-mtime -n | Mostra i file che sono stati modificati tot giorni fa. Di default parte da 24 ore e va a multipli di giorni. Quindi con -mtime +1 andrà a cercare i file che sono stati modificati fino a due giorni prima.  | Esempio:  find -mtime +1 | Risultato: mostra i file che sono stati modificati fino a due giorni fa.  | 
-amin n | Mostra i file a cui è stato fatto accesso più di n minuti fa. Per esempio -amin -60 mostra i file a cui è stato fatto accesso negli ultimi 60 minuti.  | Esempio:  find -amin -60 | Risultato: mostra i file a cui è stato fatto accesso negli ultimi 60 minuti.  | 
-mmin n | Mostra i file modificati più, meno o esattamente n minuti fa.  | Esempio:  find -mmin +30 | Risultato: mostra i file modificati più di 30 minuti fa.  | 
Qui di seguito un esempio che mostra i file nella cartella corrente che sono stati modificati negli ultimi 30 minuti (-mmin -30) e oltre 30 minuti fa (-mmin +30).
Per farlo sono stati usati i comandi:
find -mmin -30
find -mmin +30

Nota: tieni presente che su Linux ci sono tre tipi di timestamp (atime – ora di ultimo accesso; mtime – ora dell’ultima modifica e ctime – ora dell’ultima modifica agli attributi). Puoi approfondire leggendo la nostra guida al comando touch.
Trovare i file in base alla dimensione
Un’altra opzione interessante del comando find è -size con cui è possibile fare una ricerca basata, appunto, sulla dimensione di file e cartelle.
Un caso pratico di utilizzo può essere quello di voler trovare rapidamente le cartelle che occupano più spazio in un determinato percorso o i file più grandi.
Possiamo usarla in diversi modi, per cui andiamo a vedere alcuni esempi pratici.
Per cercare file che corrispondono esattamente a una dimensione useremo il comando così:
find -size 20M
Il metodo più efficace, però è utilizzare delle soglie. Per esempio per cercare file al di sotto di una determinata dimensione, faremo così:
find -size -20M
Questo comando andrà a trovare tutti i file (e cartelle) che hanno dimensione inferiore a 20M.
In questo esempio ti mostro il risultato restringendo la ricerca ai soli file (con l’opzione -type come visto prima).
find -type f -size -20M

Possiamo anche cercare tutti i file che superano una determinata dimensione.
find -type f -size +1M
Il comando qui sopra trova tutti i file che hanno peso superiore a 1M.

In altri casi ancora, può servirci usare un intervallo per trovare file di dimensione compresa tra quelle indicate.
find -type f -size +1k - size -3M

In questo modo andiamo a cercare solo i file con dimensione compresa tra 1k e 3M.
Cercare i file in base ai permessi
Il comando find ci permette anche di fare una ricerca di file e cartelle in base ai permessi. In questo modo possiamo trovare per cui sono stati impostati determinati permessi e si trovano in un percorso specifico.
Nota: su Linux i permessi si possono impostare da terminale usando il comando chmod.
L’opzione da usare è -perm come vedremo adesso con alcuni esempi.
È utile combinare questa opzione a -type in modo da fare una ricerca mirata solo sui file o solo sulle directory.
Per esempio per cercare tutti i file che hanno i permessi impostati su 644, userò il comando così:
find -type f -perm 644
In questo esempio abbiamo usato il comando di sopra e poi modificato il comando per fare una ricerca per i file con i permessi 664.
 In alternativa, possiamo anche usare la modalità simbolica invece di quella numerica per indicare i permessi, ad esempio per cercare tutti i file che sono scrivibili sia dal proprietario che dal gruppo useremo il comando in questo modo:
find -perm -u+w,g+w
Se, invece volessimo fare una ricerca più ampia andando a trovare i file che sono scrivibili dal proprietario oppure dal gruppo o da entrambi, bisogna anteporre una “/” in questo modo:
find -perm /u=w,g=w
Ecco i due esempi:

Negli esempi qui sopra ho utilizzato anche l’opzione -type f in modo da restringere la ricerca ai file.
Fare una ricerca per utente o gruppo associato al file
Con il comando find è possibile ricercare i file in base all’appartenenza andando a fare una ricerca mirata per:
- proprietario del file (user);
 - gruppo del file (group).
 
Nota: la proprietà dei file su Linux si gestisce utilizzando il comando chown.
Per trovare tutti i file di proprietà di un determinato utente possiamo usare l’opzione -user seguita dal nome dell’utente.
Per esempio:
find -type f -user maria
Questo comando mi restituirà l’elenco di tutti i file che hanno come proprietario l’utente maria.
Per i gruppi il procedimento è molto simile, ma ci basta usare l’opzione -group.
find -type f -group maria
Qui di seguito ci sono alcuni esempi di ricerca per utente e gruppo.
 Ricercare i file in base al loro contenuto
Un utilizzo interessante del comando find è quello di usarlo in combinazione con altri comandi.
Se stai cercando un file testuale, è possibile che tu ricorda parte del contenuto, ma non il nome con cui hai salvato il file. In questi casi possiamo ricorrere all’uso del comando find insieme al comando grep.
find -type f -exec grep -l "lorem" {} +
Analizziamo questo comando:
- L’opzione 
-type frestringe la ricerca solo ai file. - L’opzione 
-exec [comando] {} +ci permette di eseguire un comando su tutti i file trovati da find. - Il comando 
grep -l "lorem"fa una ricerca per la stringa presente tra virgolette, in questo caso lorem, e restituisce solo i nomi dei file in cui trova la corrispondenza. 

Conclusioni
Quando si lavora da terminale il comando find è uno dei più utilizzati. Grazie ad esso è possibile non solo cercare i file per nome (come potremmo fare anche tranquillamente da interfaccia), ma anche andare a fare delle ricerche mirate in base a permessi specifici, proprietario o gruppo del file, range di dimensione o in base al contenuto stesso del file.
Avevi mai usato il comando find? Facci sapere nei commenti.
 
 
 
 
Lascia un commento