Trova file e directory su Linux con il comando find | Opensource.com

Indipendentemente da quanto organizzato risolvo di essere, 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 riesco a ricordare dove ho deciso di salvarlo. Ci sono anche momenti 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 comando find.

Installazione di find

Il comando find è definito dalla specifica POSIX, che crea lo standard aperto con cui vengono misurati i sistemi POSIX (inclusi Linux, BSD e macOS). In poche parole, hai già installato find finché stai usando Linux, BSD o macOS.

Tuttavia, non tutti i comandi find sono esattamente uguali. Il comando GNU find, ad esempio, ha caratteristiche che il comando BSD o Busybox o Solaris find potrebbe non avere o avere ma implementa in modo diverso. Questo articolo utilizza GNU find dal pacchetto findutils perché è facilmente disponibile e piuttosto popolare. La maggior parte dei comandi dimostrati in questo articolo funziona con altre implementazioni di find, ma se provi un comando su una piattaforma diversa da Linux e ottieni risultati inaspettati, prova a scaricare e installare la versione GNU.

Trovare un file per nome

È possibile individuare un file per nome fornendo il nome completo del file o parti del nome del file utilizzando le espressioni regolari. Il comando find richiede il percorso della directory in cui si desidera cercare, le opzioni per specificare l’attributo che si sta cercando (ad esempio,- name per un nome di file sensibile alle maiuscole e minuscole) e quindi la stringa di ricerca. Per impostazione predefinita, la stringa di ricerca viene trattata letteralmente: il comando find cerca un nome file che è esattamente la stringa immessa tra virgolette a meno che non si usi la sintassi delle espressioni regolari.

Si supponga che la directory dei documenti contenga quattro file: Foo, foo, foobar.txt, e foo.xml. Ecco una ricerca letterale per un file con il nome “foo”:

$ find ~ -name "foo"
/home/tux/Documents/examples/foo

È possibile ampliare la ricerca rendendola insensibile alle maiuscole e minuscole con l’opzione -iname :

$ find ~ -iname "foo"
/home/tux/Documents/examples/foo
/home/tux/Documents/examples/Foo

Caratteri jolly

È possibile utilizzare i caratteri jolly di base della shell 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 delle espressioni regolari, quindi il punto (.) rappresenta un punto letterale in questo esempio.

Espressioni regolari

È anche possibile utilizzare espressioni regolari. Come con -iname e -name, c’è sia un’opzione case-sensitive che un’opzione case-insensitive. A differenza delle opzioni -name e -iname, tuttavia, una ricerca -regex e -iregex viene applicata all’intero percorso, non solo al nome del file. Ciò significa che se cerchi foo, non ottieni risultati perché foonon corrisponde a /home/tux/Documents/foo. Invece, è necessario cercare l’intero percorso oppure utilizzare una sequenza di caratteri jolly all’inizio della stringa:

$ find ~ -iregex ".*foo"
/home/tux/Documents/examples/foo
/home/tux/Documents/examples/Foo

Trovare un file modificati nell’ultima settimana

Per trovare un file è modificato per ultimo la scorsa settimana, utilizzare -mtime opzione insieme a (negativo) numero di giorni nel passato:

$ 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

Trovare un file modificati all’interno di un intervallo di giorni

È possibile combinare -mtime opzioni per individuare un file all’interno di un intervallo di giorni. Per il primo argomento -mtime, fornire il numero più recente di giorni in cui è possibile modificare il file e, per il secondo, fornire il maggior numero di giorni. Ad esempio, questa ricerca cerca i file con tempi di modifica più di un giorno in 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 quello che 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 di lettere che rappresenta alcuni tipi diversi di dati. I più comuni sono:

  • d – directory
  • f – file
  • l – link simbolico
  • s – presa
  • p – named pipe (utilizzato per FIFO)
  • b – blocco speciale (di solito un disco rigido denominazione)

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 la portata

Il find comando è ricorsiva per impostazione predefinita, il che significa che si cerca risultati nella directory di cartelle contenute nella directory (e così via). Questo può diventare travolgente in un grande filesystem, ma puoi usare l’opzione -maxdepth per controllare quanto in profondità nella struttura delle cartelle vuoi che find discenda:

$ find /usr -iname "*xml" | wc -l
15588
$ find /usr -maxdepth 2 -iname "*xml" | wc -l
15

È possibile impostare alternativamente 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. E ‘ un ottimo strumento per la ricerca attraverso il sistema, ma è anche un front-end davvero utile per il potente comando parallelo. Ci sono molte ragioni per imparare find, in modo da scaricare il nostro libero find cheat sheet per aiutarvi a saperne di più sul comando.

Leave a Reply