Come trovare file in Linux usando la riga di comando

find è un comando per filtrare ricorsivamente oggetti nel file system basati su un semplice meccanismo condizionale. Usate find per cercare un file o una directory nel vostro file system. Usando il flag -exec, i file possono essere trovati e processati immediatamente all’interno dello stesso comando.

Trova file Linux per nome o estensione

Utilizza find dalla riga di comando per individuare un file specifico per nome o estensione. Il seguente esempio cerca i file *.err nella directory /home/username/ e tutte le sottodirectory:

find /home/username/ -name "*.err"

Dovresti vedere un output simile nella tua console:

 /home/username/example.errThe matching file in the /home/username/ directory is "example.err"

Comuni comandi e sintassi di Linux Find

Il comando find di solito ha la seguente forma:

find options starting/path expression
  • L’attributo options controlla il comportamento e il metodo di ottimizzazione del processo find.
  • L’attributo starting/path definisce la directory di primo livello dove find inizia a filtrare.
  • L’attributo expression controlla i test che cercano nella gerarchia di directory per produrre l’output.

Trovare un file in Linux usando il nome del file

Per trovare un file usando il nome del file, usa la sintassi find -name filename. Omettendo il percorso si cerca il file su tutto il disco. Per esempio, puoi trovare un file chiamato example.err situato nella tua directory /home/username con il seguente comando:

find -name example.err

Dovresti vedere un output simile:

 ./username/example.err

Trova un file nella tua directory corrente usando il comando Trova

Guarda la struttura della directory e i file di esempio. Si fa riferimento ad essi in tutti gli esempi di questa guida.

 ├── directory_1│ ├── subdirectory_1│ │ └── example.err│ └── example.err├── directory_2│ └── example.err├── directory_3│ └── example.err├── image01.png├── web_files│ ├── app.html│ ├── cb=gapi.loaded_0│ ├── edit.html│ ├── m=_b,_tp│ ├── rs=AA2YrTtgyE1yYXiu-GuLS6sbJdYr0u8VBQ│ ├── rs=AA2YrTvod91nzEJFOvvfJUrn6_vLwwY0bw│ ├── saved_resource.html│ ├── single.html│ └── unnamed.jpg├── web.html└── example.err

Se sei in directory_1 e vuoi trovare il file example.err all’interno della directory o di una qualsiasi delle sue sottodirectory, puoi lanciare il seguente comando:

find . -name example.err

Il tuo output assomiglia al seguente:

 ./example.err./directory_1/example.err

L’output riflette la struttura della directory directory_1:

 ├── directory_1│ ├── subdirectory_1│ │ └── example.err│ └── example.err

Trovare i file immagine in Linux usando la riga di comando

Riferimento alla struttura dei file nella sezione precedente, c’è un’immagine chiamata image01.png che si trova alla radice (/) della struttura di directory.

Per trovare il file image01.png, esegui il seguente comando find che individua tutti i file .png memorizzati all’interno della directory /.

find -name *.png

Dovresti vedere un output simile:

 ./image01.png

Cambia il tipo di file immagine e cerca qualsiasi file .jpg all’interno della directory principale (/):

find -name *.jpg

L’output è simile all’esempio. Fai riferimento alla struttura della directory di esempio nella sezione precedente per vedere la posizione del file.

 ./web_files/unnamed.jpg

Trova un file vuoto nella tua directory usando la riga di comando

Per trovare un file vuoto nella tua directory usando la riga di comando, dai il seguente comando:

find . -type f -empty

Se non viene restituito alcun output, allora non c’è un file vuoto nella tua directory corrente.

Opzioni e ottimizzazioni per trovare file in Linux usando la riga di comando

La configurazione predefinita per find ignora i collegamenti simbolici. Se vuoi che find segua e restituisca i collegamenti simbolici, aggiungi l’opzione -L al comando, come mostrato di seguito:

find -O3 -L /var/www/ -name "*.html"

Questo comando abilita il massimo livello di ottimizzazione (-O3) e permette a find di seguire i collegamenti simbolici (-L). find cerca nell’intero albero delle directory sotto /var/www/ i file che finiscono con .html.

find ottimizza la sua strategia di filtraggio per aumentare le prestazioni. Tre livelli di ottimizzazione selezionabili dall’utente sono specificati come -O1, -O2 e -O3. L’ottimizzazione -O1 è quella predefinita e costringe find a filtrare in base al nome del file prima di eseguire tutti gli altri test.

L’ottimizzazione al livello -O2 dà priorità ai filtri per il nome del file, come in -O1, e poi esegue tutti i filtri per il tipo di file prima di procedere con altre condizioni che richiedono più risorse. L’ottimizzazione a livello -O3 permette a find di eseguire l’ottimizzazione più severa e riordina tutti i test in base al loro costo relativo e alla probabilità di successo.

Comando Descrizione
-O1 Filtra prima il nome del file (predefinito).
-O2 Prima il nome del file, poi il tipo di file.
-O3 Consente a find di riordinare automaticamente la ricerca in base all’uso efficiente delle risorse e alla probabilità di successo
-maxdepth X Ricerca nella directory corrente e in tutte le sottodirectory a X livelli di profondità.
-iname Ricerca senza considerare il caso di testo.
-not Riporta solo i risultati che non corrispondono al test case.
-type f Ricerca di file.
-type d Ricerca di directory.

Trova file in Linux per tempo di modifica usando la riga di comando

Il comando find può filtrare una gerarchia di directory in base a quando un file è stato modificato per ultimo. Per esempio, il seguente comando trova qualsiasi file con l’estensione .err che è stato modificato negli ultimi 7 giorni:

find / -name "*err" -mtime -7

Il comando di esempio restituisce il seguente output:

 /home/username/directory_3/example.err/home/username/username/example.err/home/username/username/directory_2/example.err/home/username/username/directory_1/example.err/home/username/username/directory_1/subdirectory_1/example.err

Utilizzare Grep per trovare file in Linux usando la riga di comando

Il comando find è solo in grado di filtrare la gerarchia di directory basandosi sul nome e sui metadati di un file. Se hai bisogno di cercare in base al contenuto del file, usa uno strumento comeegrep. Considerate il seguente esempio:

find . -type f -exec grep "test" '{}' \; -print

Questo comando cerca ogni oggetto nella gerarchia di directory corrente (.) che sia un file (-type f) e poi esegue il comando grep "test" per ogni file che soddisfa le condizioni. I file che corrispondono vengono stampati sullo schermo (-print). Le parentesi graffe ({}) sono un segnaposto per i risultati della ricerca. Le {} sono racchiuse tra virgolette singole (') per evitare di dare a grep un nome di file malformato. Il comando -exec termina con un punto e virgola (;), che dovrebbe essere evitato (\;) per evitare l’interpretazione da parte della shell.

Il file usato nell’esempio (example.err) ha del testo al suo interno che dice “test”. Quando si esegue il comando di esempio, si vede un output simile:

 test./directory_3/example.errtest./example.errtest./directory_2/example.errtest./directory_1/example.errtest./directory_1/subdirectory_1/example.err

Grep ha identificato ogni file nella directory di lavoro corrente che contiene la stringa “test”.

Nota

Prima che il comando find implementasse l’opzione -exec, si poteva generare un output simile all’esempio precedente usando il comando xargs:

find . -type f -print | xargs grep "test"

Elabora e trova file usando il comando Find in Linux

L’opzione -exec esegue comandi contro ogni oggetto che corrisponde all’espressione find. Considera il seguente esempio:

find . -name "example.err" -exec chmod o+r '{}' \;

Questo filtra ogni oggetto nella gerarchia corrente (.) per i file chiamati rc.conf ed esegue il comando chmod o+r per modificare i permessi dei file dei risultati del comando find.

Il comando di esempio esegue ed esegue l’opzione -exec nella directory principale del processo find. Usa -execdir per eseguire il comando specificato nella directory dove risiede la corrispondenza. Questo può alleviare i problemi di sicurezza e produrre prestazioni migliori per alcune operazioni.

Le opzioni -exec o -execdir vengono eseguite senza ulteriori richieste. Se preferisci che ti venga richiesto prima di agire, sostituisci -exec con -ok o -execdir con -okdir.

Come trovare ed eliminare file usando la riga di comando di Linux

Attenzione

Usa questa opzione con estrema cautela.

Aggiungi l’opzione -delete alla fine di un’espressione di corrispondenza per eliminare tutti i file che corrispondono. Usa questa opzione quando sei certo che i risultati corrispondano solo ai file che vuoi eliminare.

Nell’esempio qui sotto, find individua ricorsivamente tutti i file nella gerarchia a partire dalla directory corrente ed elimina tutti i file che terminano con l’estensione .err:

find . -name "*.err" -delete

Hai ancora qualche domanda?

Entra nella nostra Community e pubblica le tue domande per farti aiutare da altri appassionati di Linode e Linux.

Domande correlate:

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.