Articolo originale: How to Search Files Effectively in the Linux Terminal

Ti sai mai sentito frustrato cercando manualmente dei file suo tuo computer? Se sei uno sviluppatore oppure un ingegnere DevOps che lavora su un server Linux che non dispone di un'Interfaccia Grafica Utente (GUI), sarà difficile spostarti avanti e indietro per cercare dei file.

Molte persone non sono consapevoli della potenza dei terminali Linux. Linux ha una riga di comando incredibilmente potente che ti consente di cercare file e directory in una frazione di secondo.

Che tu sia un principiante o un esperto, se stai cercando di portare le tue doti di gestione dei file al livello superiore, sei nel posto giusto. Questo articolo ti aiuterà a capire le basi della sintassi dei comandi find maggiormente usati in Linux.

Cos'è il Comando find in Linux?

Il comando find ti consente di cercare file e directory nel tuo computer. Aggiunge la flessibilità di cercare file in una directory specifica oppure ricorsivamente in tutte le sotto-directory.

Esploriamo la potenza del comando find.

Come Cercare un File per Nome

Diciamo che hai salvato un file chiamato hello_world.html da qualche parte e non ti ricordi neppure il nome della directory. Tuttavia il tuo capo ti chiede di inviargli il file immediatamente.

In genere, se ti dimentichi dove hai salvato il file, inizi a cercare cartella dopo cartella per vedere se trovi il file.

Ecco quando il comando find funziona alla grande. Invece di cercare il file manualmente nel tuo computer, puoi usare il comando find per automatizzare il processo.

Passando il nome del file all'opzione  -name , il comando find cerca il file e ne restituisce la posizione.

find -name <nome_file>
Sintassi del comando find per cercare file per nome
hUG1ogKlPIlvUZZiCIOBO4x1ZTlGAujhGTe2v-KevAi3zU3z-ZuBA0VJvMWht0V-7cLha4beNzMIkENiN0ZiYZfa8Pc0O-XJMzmbfftY_bo9Csrz-4-7dvwJFgC59G94A2GbFpPTkfU6rxL9MrSOCVI
Comando dal terminale per cercare un file per nome

Ricorda che con l'opzione -name viene eseguita una ricerca che tiene conto delle minuscole/maiuscole. Per svolgere una ricerca che ignori se una lettera sia minuscola o maiuscola, puoi usare l'opzione -iname.

find -iname <nome_file>
Sintassi del comando find per eseguire una ricerca che ignora maiuscole/minuscole
Gxuso3qZslePPLMxKDtBuQWwQiliDpU2pHAzRTdiRob2OBKrdN1oWA_rTwe2thYiHeUmRo8SBNE2QR6G2kmdDlKhX14wFd9fYmfppZVQNprUHaGMWLB_GgGVSq7l4DQyP2STSFZcx0Rt5B6thvM7T3Y
Comando dal terminale per eseguire una ricerca che ignora maiuscole/minuscole

Puoi anche usare find come alternativa al comando ls in alcune situazioni. Diciamo che ti serve trovare tutti i file che hanno un'estensione .txt. Puoi farlo con il comando find usando un pattern di espressione regolare (*.txt).

find /percorso/da/cercare -name "*.txt"
Comando find per cercare i file corrispondenti a un pattern
xtbCKd-v83ytN4mnr35RbiWCgJuEiAt9LBO_Qq2IDwRPJaQWRfzBUe5YY63JEcLHS344TvGWRzK139n93upgh1ALKgRavsWwNe0iTh772rhGZwFXcpP5eyGz_iI6XPHuDK55Ch93rNe70fSIyJJcMmw
Comando dal terminale per cercare file che trovano corrispondenza con un pattern

Il comando qui sopra elenca tutti i file con estensione .txt nella tua directory corrente e sue sotto-directory.

Per trovare file con estensione .txt in una specifica directory e sotto-directory sostituisci /percorso/da/cercare con il percorso della directory dalla quale vuoi iniziare la ricerca, nell'esempio la directory corrente.

Come Cercare Directory in Linux

È possibile cercare una directory passando l'opzione  d al parametro -type del comando find.

find /percorso/da/cercare -type d
Sintassi del comando find per trovare una directory
pasted-image-0
Comando da terminale per cercare una directory usando find

Nella videata qui sopra, c'è il risultato della ricerca di una directory chiamata zip partendo dalla directory corrente.

In modo simile, l'opzione -type accetta altri parametri che consentono di semplificare il nostro processo di ricerca.

  • f trova i file normali
  • b trova i file di dispositivi a blocchi
  • c trova i file di dispositivi a caratteri
  • l trova i link simbolici
  • s trova i socket
  • p trova le named pipe

Come Cercare un File per Dimensione in Linux

Aggiungere l'opzione -size al comando find ti aiuta a trovare file in base alla loro dimensione. Anteponi un + o un - alla dimensione per rappresentare rispettivamente valori maggiori di o minori di.

find /percorso/da/cercare -size <dimensione_del_file>
Sintassi del comando find per cercare file per dimensione
5_gYC6AREIU77iDWAOY3uqfyCEPpICXenMzpxMv15oaOyNg2t4QhtH862wZeIRH3IgWxX1MJYwAOMGQZVeerY6HeNYjcmB_bdMiqPnoAsSyQ5JjQ75DqmCOsbcLQ8AeMk31MQb9Z1aC0Q-1CznPNRn8
Ricerca da terminale di file per dimensione

Nella videata qui sopra stiamo cercando file con dimensione maggiore di  1 GB.

Puoi anche cercare i file che rientrano in uno specifico intervallo di dimensioni.

Per esempio, se vuoi trovare tutti i file che hanno dimensione maggiore di 50 MB e inferiore a 100 MB, puoi eseguire il seguente comando:

find /percorso/da/cercare -size +50M -size -100M
Sintassi del comando find per cercare file in un intervallo di dimensioni
KylER-ErURtFf22PtpPhqT8yQofvlaA6s7XhP8FdHo4KqLTXYsDY5EL3LhVoyZKrHJGMHYWJ6CheD2PiaS_ynX_x-Ziho5eqK8YbEAqdAVvugE0RUWuOPvuwrUddCIw4TnoqLZDSI2qRak1kdDF6o40
Ricerca da terminale di file in un intervallo di dimensioni

Puoi specificare la dimensione nell'unità di misura che preferisci. Alcune di quelle a disposizione sono:

  1. K rappresenta KB
  2. M rappresenta MB
  3. G rappresenta GB
  4. b rappresenta byte
  5. c rappresenta blocchi

Come Cercare File in Base alla Data di Modifica

Ogni file ha una data/ora di creazione e ultima modifica associate. Supponiamo che tu abbia migliaia di file nella tua directory. Hai modificato un file negli ultimi due giorni ma hai dimenticato il suo nome. Ma sei sicuro che dopo quello hai modificato solo un altro paio di file.

In questi casi, puoi trovare tutti i file che sono stati modificati negli ultimi 7 giorni. Questo limita la ricerca da oltre 1000 file a un numero molto più gestibile. Riuscirai a trovare il file che hai modificato in pochi secondi dopo aver eseguito il comando.

Ciò è possibile usando l'opzione -mtime del comando find .

find /percorso/da/cercare -mtime <-numero_giorni_fa>
Sintassi del comando find per cercare file modificati dopo una certa data
EOsirsBvBa83A2NeK1qGZ8g_FLriAngr4yso3nhOpuwT18zrkur92GKfMBfr8nA8ULrgdWvREvzJfSznVecNXZXONs3JXdG3gJFoqZ7PcqFmZe3T2IS0ka-bkSajpj3aXunMvTYYPZkLl4YjkYzx_1Y
Ricerca da terminale di file in base alla data di modifica

Consideriamo un altro caso, in cui la data odierna sia 10 febbraio 2023. Hai modificato un file prima del 3 febbraio 2023. Dopo quella data hai modificato molti file. Devi trovare il file che è stato modificato prima del 3 febbraio 2023. Praticamente devi cercare i file che sono stati modificati prima del 3 febbraio 2023.

Un caso un po' strano, vero?

Puoi eseguire questa ricerca con il comando find, sostituendo il segno meno (-) con il segno più (+).

Ecco il comando modificato:

find /percorso/da/cercare -mtime +7
Sintassi del comando find per cercare file modificati prima di una certa data

Come Eseguire un Comando sui File Filtrati dal Comando find

Il titolo di questa sezione potrebbe confonderti. Prima di svelare la risposta, cerchiamo di capire chiaramente il contesto con uno scenario reale.

Supponiamo di avere 1000 file in una directory, ed eseguendo il comando find è stata trovata corrispondenza con 20 file. Vuoi spostare questi 20 file in una diversa directory. Come puoi farlo?

In termini semplici, dobbiamo eseguire un comando per ciascuno di questi file filtrati.

Puoi fare questo passando l'opzione -exec al comando find.

L'opzione -exec esegue un comando su ciascun file che è stato trovato nella ricerca. L'opzione -exec è seguita da un comando e dai suoi argomenti, con le parentesi graffe{} che rappresentano i file che saranno elaborati.

Per rappresentare la fine del comando -exec, dobbiamo aggiungere una barra rovesciata e un punto e virgola (\;) .

Ecco la sintassi:

find /percorso/di/ricerca -name  -exec  {}  \;
Sintassi del comando find per eseguire un'operazione sui file filtrati

Cerchiamo di spostare i file filtrati dalla directory 5minslearn alla directory zip.

Ecco il comando:

find ./5minslearn -name "*.zip" -exec mv {} ./5minslearn/zip \;
Oysc8VJqcheOL0uSk9t18SM1BBckLmZ1Sfs026TByvdQcHNFVDGssztFu13rHi0waaOUXCuKx1rsHbyWCXr190agnVEKZA3rMexuSH_m6myz38JhQ563hNLBKfTBOMklTt-aH5dd05CfXCVwKG0yiZI

Questo comando cerca tutti i file che hanno estensione .zip nella directory ./5minslearn e li sposta nella directory ./5minslearn/zip.

L'opzione -exec ti consente di eseguire una vasta gamma di operazioni sui file trovati. Puoi sostituire il comando di spostamento dell'esempio precedente con i comandi di copia, eliminazione o anche utilizzare il comando per cambiare i permessi del file.

Come Eseguire un Comando sui File Filtrati con una Conferma

Molte persone preferiscono usare questo comando se non sono sicure del modo nel quale verranno applicate le operazioni su ciascun file.

L'opzione -ok è simile all'opzione -exec a eccezione del fatto che richiede una conferma prima di eseguire l'operazione specificata su ciascun file. Questo comando è particolarmente utile per verificare quali file siano interessati prima di eseguire l'operazione specifica. Puoi anche annullare l'operazione se non sei sicuro o non la vuoi eseguire.

Per esempio, questa volta cerchiamo di spostare i file con estensione .txt in un'altra directory.

find /percorso/da/cercare -name "*.txt" -ok mv {} /percorso/nuova/destinazione \;
Sintassi del comando find per confermare prima di eseguire un'operazione sui file filtrati
LR9SFYz9f90xR6_aMS_VKEQa7IS9cecwEAMRkNh5KJ1JSMaQCx0cIe-5XOonpOOdELbnU8549XkQ-HfYCQEoG9Epn8F89cA86o3BRFTR9cJtOLM7GgvKpWMNpkutX89sRtWs96wZ0pz-JHZTSGFBrq0
Comando da terminale per spostare i file filtrati con conferma

Il comando qui sopra cerca tutti i file con estensione .txt nella directory ./5minslearn e chiede all'utente di confermare prima di spostare ciascun file nella directory ./5minslearn/text_files.

Per confermare l'operazione, digita yes e no per rinunciare e passare al file successivo.

L'opzione -ok è utile quando vuoi essere cauto rispetto alle operazioni che devi effettuare sui file trovati, visto che ti consente di verificare ogni file e la sua posizione prima di eseguire il comando specifico.

Come Trovare File Visualizzando Informazioni Dettagliate

L'opzione -ls del comando find viene usata per visualizzare informazioni circa i file trovati nella ricerca, nel formato del comando ls. Questa opzione fornisce informazioni dettagliate sui file, come i loro permessi, il proprietario, la dimensione, e l'ultima data di modifica.

find /percorso/da/cercare -name "*.<estensione_file>" -ls
Sintassi del comando find per elencare i file con il formato del comando ls
pasted-image-0--1-
Comando da terminale per elencare i file con il formato del comando ls

Come Trovare e Rimuovere File

Hai mai dovuto trovare file ed eliminarli dal tuo computer? L'opzione -delete di find fa questo per te. Ti consente di eliminare file che corrispondono a un certo criterio.

find . -name "*.<estensione>" -delete
W2DQEoEcNi0897Z99NPHyhx6RTPpO1hL0AVCAGCuKdabq8_eXbFtsL2BJdLn6MCqdYXTa7veSRhDj9gTU7Rbbz0vNoIbxF_N_IXmR45IHgH3DMXSnMBRPtLjIKK-G9af5FncqC2s28zqBfP6kcinXqY

Nell'esempio qui sopra puoi vedere che il comando find ha eliminato i file con estensione .html.

Nota: questa operazione è irreversibile. Devi essere assolutamente sicuro quando esegui l'operazione di cancellazione.

Ti consiglio di eseguire il comando find senza l'opzione -delete una prima volta per assicurarti che vengano trovati solo i file che dovrebbero essere cancellati. Una volta che sei sicuro, puoi eseguire lo stesso comando aggiungendo l'opzione -delete.

Conclusione

In questo articolo, hai imparato come cercare i file con efficacia usando il tuo terminale Linux.

Queste sono solo le opzioni base del comando find che ogni sviluppatore dovrebbe conoscere. Credo che la padronanza dei fondamentali sia il primo passo per migliorare la conoscenza di Linux. Ho trattato delle basi su tutti i miei blog per aiutarti a creare solide fondamenta.

Per saperne di più su Linux, iscriviti alla mia newsletter via email sul mio sito e seguimi sui social media.