Guida al comando find su Linux


Il comando find è uno strumento fondamentale in qualsiasi distribuzione Linux. Grazie alla sua versatilità, ti permette di cercare file e directory in base a una vasta gamma di criteri, come nome, dimensione, data di modifica, permessi e altro ancora. In questa guida, esploreremo gli usi più comuni e alcune delle funzionalità avanzate di find, mostrando come questo strumento possa essere usato per risolvere problemi quotidiani nella gestione dei file.


Diffusione del comando find nelle distribuzioni Linux

find è disponibile su tutte le principali distribuzioni Linux, come Ubuntu, Fedora, Debian e molte altre. Fa parte del pacchetto GNU Findutils, che include anche altri strumenti utili come xargs. Anche macOS e Unix-like utilizzano find, rendendolo uno strumento standard negli ambienti basati su Unix.


Guida pratica all’uso del comando find

Vediamo ora diversi esempi pratici, dal più semplice fino a casi d’uso avanzati.

1. Ricerca di file per nome

Per cercare un file specifico per nome, puoi usare l’opzione -name:

find /percorso/directory -name "nomefile.txt"

Se vuoi che la ricerca non sia case-sensitive, puoi usare -iname:

find /percorso/directory -iname "nomefile.txt"

2. Ricerca per tipo di file

Se vuoi trovare solo file o directory, puoi usare l’opzione -type. Ad esempio, per trovare solo file regolari:

find /percorso/directory -type f

Oppure per trovare solo directory:

find /percorso/directory -type d

3. Ricerca per estensione di file

Per trovare tutti i file con una determinata estensione, ad esempio .jpg:

find /percorso/directory -name "*.jpg"

4. Ricerca di file in base alla dimensione

Per cercare file di una certa dimensione, puoi usare l’opzione -size. Ad esempio, per trovare file più grandi di 100MB:

find /percorso/directory -size +100M

Oppure file più piccoli di 10KB:

find /percorso/directory -size -10k

5. Ricerca per data di modifica o accesso

Puoi cercare file in base alla data in cui sono stati modificati o accessi l’ultima volta. Ad esempio, per cercare file modificati negli ultimi 7 giorni, usa l’opzione -mtime:

find /percorso/directory -mtime -7
  • -mtime -7 cerca i file modificati negli ultimi 7 giorni.
  • -mtime +30 cercherà file modificati più di 30 giorni fa.

Per cercare file in base alla data di ultimo accesso, usa -atime:

find /percorso/directory -atime -10

Ricerca di file tra due date specifiche

Se vuoi cercare file modificati tra due date, puoi farlo direttamente usando l’opzione -newermt, che ti consente di specificare una data nel formato “YYYY-MM-DD”. Ecco alcuni esempi pratici.

6. Ricerca di file modificati tra due date

Per cercare file modificati tra il 1 gennaio 2024 e il 1 febbraio 2024:

find /percorso/directory -newermt "2024-01-01" ! -newermt "2024-02-01"

In questo comando:

  • -newermt "2024-01-01" cerca file modificati dopo il 1 gennaio 2024.
  • ! -newermt "2024-02-01" esclude i file modificati dopo il 1 febbraio 2024.

7. Ricerca di file modificati prima di una data

Per trovare file modificati prima di una data specifica, ad esempio prima del 1 gennaio 2024:

find /percorso/directory ! -newermt "2024-01-01"

8. Ricerca di file modificati dopo una data

Per cercare file modificati dopo una data specifica, ad esempio il 1 gennaio 2024:

find /percorso/directory -newermt "2024-01-01"

Uso dell’opzione -exec: eseguire comandi sui file trovati

Un aspetto molto potente di find è la possibilità di eseguire comandi su ogni file trovato, utilizzando l’opzione -exec. Questo è particolarmente utile per operazioni automatiche come la cancellazione di vecchi file, la modifica dei permessi, o l’esecuzione di script su determinati file.

9. Cancellare file più vecchi di 30 giorni

Per esempio, per eliminare tutti i file .log che sono stati modificati più di 30 giorni fa, puoi usare questo comando:

find /percorso/directory -name "*.log" -mtime +30 -exec rm {} \;
  • -name "*.log" trova tutti i file con estensione .log.
  • -mtime +30 trova i file modificati più di 30 giorni fa.
  • -exec rm {} \; esegue il comando rm su ogni file trovato (la coppia {} rappresenta ciascun file trovato e \; termina il comando).

10. Altri esempi con -exec

  • Modificare i permessi di file specifici: Supponiamo che tu voglia cambiare i permessi di tutti i file .sh per renderli eseguibili:
  find /percorso/directory -name "*.sh" -exec chmod +x {} \;
  • Copiare tutti i file trovati in un’altra directory: Se desideri copiare tutti i file .txt modificati negli ultimi 7 giorni in una directory di backup:
  find /percorso/directory -name "*.txt" -mtime -7 -exec cp {} /percorso/backup/ \;


Linkografia

Ecco alcune risorse utili per approfondire l’uso di find:

  1. Documentazione ufficiale GNU Findutils:
    https://www.gnu.org/software/findutils/manual/html_mono/find.html
    La guida ufficiale per il pacchetto GNU Findutils, che include find e altri strumenti correlati.
  2. Cheat Sheet di find su devhints.io:
    https://devhints.io/find
    Un pratico riassunto delle principali opzioni e usi di find.
  3. Tutorial di DigitalOcean:
    https://www.digitalocean.com/community/tutorials/how-to-use-find-and-locate-to-search-for-files-on-linux
    Una guida approfondita che copre sia il comando find che locate, con esempi pratici per cercare file in Linux.