fb-pixel

Come trovare file e cartelle con il comando find su Linux

Pubblicato in:

by:

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!

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"
Comando Find Linux Trova Corrispondenza Nome

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 -name specifichiamo 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.

Comando Find Linux Trova Corrispondenza Nome Opzione 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*"
Ricerca File Cartelle Nome Parziale Comando Find

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"
Comando Find Ricerca Home

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"
Find Linux Percorso Specifico

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"
Ricerca File Per Estensione Find

Il risultato sarà qualsiasi file in formato jpeg.

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.
Ricerca Ristretta File Cartelle Link Comando Find

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
Find Trovare File Cartelle Vuote

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
Comando Find Opzioni Ora Di Modifica

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
Trovare File Dimensione Massima Find

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.

Comando Find File Piu Grandi Di Dimensione Specificata

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
Comando Find Opzione Size Intervallo

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.

Comando Find Ricerca File Per Permessi

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:

Comando Find Permessi Simbolici

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.

Ricerca File Per Utente O Gruppo Comando Find

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 f restringe 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.
Usare Find Con Grep

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.


Prova gratis e senza impegno uno dei nostri piani hosting per 14 giorni. Non è richiesto nessun dato di pagamento!

Commenti

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *