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
- Comuni comandi e sintassi di Linux Find
- Trovare un file in Linux usando il nome del file
- Trova un file nella tua directory corrente usando il comando Trova
- Trovare i file immagine in Linux usando la riga di comando
- Trova un file vuoto nella tua directory usando la riga di comando
- Opzioni e ottimizzazioni per trovare file in Linux usando la riga di comando
- Trova file in Linux per tempo di modifica usando la riga di comando
- Utilizzare Grep per trovare file in Linux usando la riga di comando
- Elabora e trova file usando il comando Find in Linux
- Come trovare ed eliminare file usando la riga di comando di Linux
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 processofind
. - L’attributo
starting/path
definisce la directory di primo livello dovefind
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 comandoxargs
: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: