GNU/Linux >> Linux Esercitazione >  >> Linux

Trova file e directory su Linux con il comando find

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 - directory
  • f - file
  • l - collegamento simbolico
  • s - presa
  • p - 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.


Linux
  1. Copia e incolla nella riga di comando di Linux con xclip

  2. Trova file e directory in Linux come un professionista

  3. Come eliminare file e directory in Linux dalla riga di comando

  4. Come trovare file con il comando fd in Linux

  5. trova e rimuovi i file con spazio usando il comando trova su Linux

Comando Trova Linux con esempi pratici

Come trovare file con il comando fd in Linux

Trova facilmente file e directory su Linux

Tutorial comando trova Linux (con esempi)

Come trovare file con dozzine di criteri con il comando Trova Bash

Nozioni di base sulla riga di comando di Linux:lavorare con file e directory