Indipendentemente da quanto mi risolvo ad essere organizzato, sembra che ci siano sempre momenti in cui non riesco a individuare un file. A volte è perché non riesco a ricordare il nome del file in primo luogo. Altre volte conosco il nome, ma non ricordo dove ho deciso di salvarlo. Ci sono anche volte in cui ho bisogno di un file che non ho creato in primo luogo. Non importa quale sia il dilemma, però, so che su un sistema POSIX, ho sempre il find
comando.
Più risorse Linux
- Comandi Linux cheat sheet
- Cheat sheet sui comandi avanzati di Linux
- Corso online gratuito:Panoramica tecnica RHEL
- Cheat sheet della rete Linux
- Cheat sheet di SELinux
- Cheat sheet dei comandi comuni di Linux
- Cosa sono i container Linux?
- I nostri ultimi articoli su Linux
Installazione di trova
Il find
comando è definito dalla specifica POSIX, che crea lo standard aperto in base al quale vengono misurati i sistemi POSIX (inclusi Linux, BSD e macOS). In poche parole, hai già find
installato finché stai utilizzando Linux, BSD o macOS.
Tuttavia, non tutti i find
i comandi sono esattamente uguali. Il find
di GNU Il comando, ad esempio, ha funzioni che BSD o Busybox o Solaris find
il comando potrebbe non avere o ha ma implementa in modo diverso. Questo articolo utilizza GNU find
dal pacchetto findutils perché è prontamente disponibile e piuttosto popolare. La maggior parte dei comandi illustrati in questo articolo funzionano con altre implementazioni di find
, ma se dovessi provare un comando su una piattaforma diversa da Linux e ottenere risultati imprevisti, prova a scaricare e installare la versione GNU.
Trova un file per nome
È possibile individuare un file in base al nome file fornendo il nome file completo o parti del nome file utilizzando espressioni regolari. Il find
Il comando richiede il percorso della directory in cui si desidera eseguire la ricerca, le opzioni per specificare l'attributo che si sta cercando (ad esempio, -name
per un nome file con distinzione tra maiuscole e minuscole), quindi la stringa di ricerca. Per impostazione predefinita, la stringa di ricerca viene trattata alla lettera:find
comando cerca un nome file che sia esattamente la stringa che inserisci tra virgolette a meno che tu non usi la sintassi delle espressioni regolari.
Supponi che la tua directory Documenti contenga quattro file:Foo
, foo
, foobar.txt
e foo.xml
. Ecco una ricerca letterale di un file con il nome "foo":
$ find ~ -name "foo"
/home/tux/Documents/examples/foo
Puoi ampliare la tua ricerca senza distinzione tra maiuscole e minuscole con il -iname
opzione:
$ find ~ -iname "foo"
/home/tux/Documents/examples/foo
/home/tux/Documents/examples/Foo
Caratteri jolly
È possibile utilizzare i caratteri jolly della shell di base per ampliare la ricerca. Ad esempio, l'asterisco (*
) rappresenta un numero qualsiasi di caratteri:
$ find ~ -iname "foo*"
/home/tux/Documents/examples/foo
/home/tux/Documents/examples/Foo
/home/tux/Documents/examples/foo.xml
/home/tux/Documents/examples/foobar.txt
Un punto interrogativo (?
) rappresenta un singolo carattere:
$ find ~ -iname "foo*.???"
/home/tux/Documents/examples/foo.xml
/home/tux/Documents/examples/foobar.txt
Questa non è la sintassi di un'espressione regolare, quindi il punto (.
) rappresenta un punto letterale in questo esempio.
Espressioni regolari
Puoi anche usare le espressioni regolari. Come con -iname
e -name
, sono disponibili sia un'opzione con distinzione tra maiuscole e minuscole sia un'opzione senza distinzione tra maiuscole e minuscole. A differenza del -name
e -name
opzioni, tuttavia, un -regex
e -iregex
la ricerca viene applicata all'intero percorso , non solo il nome del file. Ciò significa che se cerchi foo
, non ottieni risultati perché foo
non corrisponde a /home/tux/Documents/foo
. Invece, devi cercare l'intero percorso oppure utilizzare una sequenza di caratteri jolly all'inizio della tua stringa:
$ find ~ -iregex ".*foo"
/home/tux/Documents/examples/foo
/home/tux/Documents/examples/Foo
Trova un file modificato nell'ultima settimana
Per trovare un file che hai modificato l'ultima volta la settimana scorsa, usa -mtime
opzione insieme a un numero (negativo) di giorni passati:
$ find ~ -mtime -7
/home/tux/Documents/examples/foo
/home/tux/Documents/examples/Foo
/home/tux/Documents/examples/foo.xml
/home/tux/Documents/examples/foobar.txt
Trova un file modificato entro un intervallo di giorni
Puoi combinare -mtime
opzioni per individuare un file entro un intervallo di giorni. Per il primo -mtime
argomento, fornisci il numero più recente di giorni in cui avresti potuto modificare il file e, per il secondo, fornisci il maggior numero di giorni. Ad esempio, questa ricerca cerca i file con tempi di modifica più di un giorno nel passato, ma non più di sette:
$ find ~ -mtime +1 -mtime -7
Limita una ricerca per tipo di file
È comune ottimizzare i risultati di find
specificando il tipo di file che stai cercando. Non dovresti usare questa opzione se non sei sicuro di cosa stai cercando, ma se sai che stai cercando un file e non una directory, o una directory ma non un file, allora questo può essere un ottimo filtro da usare. L'opzione è -type
e i suoi argomenti sono un codice alfabetico che rappresenta alcuni tipi diversi di dati. I più comuni sono:
d
- directoryf
- filel
- collegamento simbolicos
- presap
- named pipe (usata per FIFO)b
- blocco speciale (di solito una designazione del disco rigido)
Ecco alcuni esempi:
$ find ~ -type d -name "Doc*"
/home/tux/Documents
$ find ~ -type f -name "Doc*"
/home/tux/Downloads/10th-Doctor.gif
$ find /dev -type b -name "sda*"
/dev/sda
/dev/sda1
Regola l'ambito
Il find
Il comando è ricorsivo per impostazione predefinita, il che significa che cerca i risultati nelle directory delle directory contenute nelle directory (e così via). Questo può diventare schiacciante in un filesystem di grandi dimensioni, ma puoi usare -maxdepth
opzione per controllare la profondità della struttura delle cartelle che desideri find
scendere:
$ find /usr -iname "*xml" | wc -l
15588
$ find /usr -maxdepth 2 -iname "*xml" | wc -l
15
In alternativa puoi impostare la profondità minima di ricorsione con -mindepth
:
$ find /usr -mindepth 8 -iname "*xml" | wc -l
9255
Scarica il cheat sheet
Questo articolo copre solo le funzioni di base di find
. È un ottimo strumento per cercare nel tuo sistema, ma è anche un front-end davvero utile per il potente comando Parallel. Ci sono molte ragioni per imparare a find
, quindi scarica il nostro find
gratuito cheat sheet per aiutarti a saperne di più sul comando.