GNU/Linux >> Linux Esercitazione >  >> Linux

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

Sei mai stato bloccato a cercare un file e non riuscivi a ricordare dove l'hai salvato, per non parlare del nome del file stesso? Su Linux, Bash find comando ti aiuterà a setacciare il tuo sistema per trovare quel file.

Non sei un lettore? Guarda questo video tutorial correlato! b>Non vedi il video? Assicurati che il blocco degli annunci sia disattivato.

Il Bash find comando in Linux offre molti modi per cercare file e directory. In questo tutorial imparerai come l'ultimo accesso, le autorizzazioni e altro di un file possono aiutare a trovare file e directory con Bash find comando. Iniziamo!

Prerequisiti

Se desideri seguire le varie demo in questo tutorial, assicurati di avere quanto segue:

  • Un PC Linux:questo tutorial utilizza Ubuntu 20.04, ma qualsiasi distribuzione Linux dovrebbe funzionare.
  • Il find utility – L'utility di ricerca di Bash dovrebbe essere già presente su tutte le distribuzioni Linux. Questo tutorial utilizza la v4.7.0.

Il Bash find Comando 101

Trovare un file richiede alcuni criteri; una parte del nome del file, un tipo di file, i permessi sul file, ecc. Il find Il comando ti consente di definire quei criteri per restringere i file esatti che desideri trovare. Il comando trova trova o cerca anche i collegamenti simbolici (collegamento simbolico). Un collegamento simbolico è un file di collegamento Linux che punta a un altro file o a una cartella sul tuo computer. Per prima cosa tratteremo il modo più semplice per usare Bash find comando.

Forse sei nella tua home directory e stai cercando una directory chiamata snap e tutti i file e le sottodirectory in esso contenuti. In tal caso, esegui find comando, seguito dal nome della directory ("snap" ), e basta!

Poiché non ci sono altri argomenti della riga di comando di seguito, puoi vedere l'elenco dei file e delle directory trovati ricorsivamente all'interno dello snap directory.

find "snap"

Se non specifichi il name parametro, find assumerà che il primo argomento dovrebbe essere per il name parametro, ad esempio find "snap" è lo stesso di find -name "snap ."

Trovare file con i test (aka filtri)

Hai visto la forma più elementare del find comando e come funziona. Ma forse vuoi restringere un po' la ricerca per definire criteri più specifici. In tal caso, dovrai applicare i test. I test sono criteri che fornisci a find comando.

I test dicono al find comando per filtrare l'output in base a molti criteri diversi.

Trovare file per nome file o directory

Forse ricordi solo come inizia il nome del file, forse senza distinzione tra maiuscole e minuscole. In tal caso, puoi utilizzare un carattere jolly per restringere i risultati.

# Find files and directories with names starting with 'snap'
find -name "snap*"

# Find files and directories with names starting with 'snap'
# in case insensitive manner (For example:'Snap', 'snap', 'SNaP', etc.)
find -iname "snap*"

Trovare file e directory per tipo di file

Come il -name prova, il -type test è un altro modo efficiente per trovare file e directory. Il -type test ti consente di filtrare il risultato del find comando da file o directory.

# Find a file named 'snap'
find "snap" -type f
# Find a directory named 'snap'
find "snap" -type d

Per restringere ulteriormente la ricerca dei file, combinare il -name e -type test eseguendo il comando seguente.

Il find il comando seguente cerca solo le directory (-type d ) con nomi (-name ) che iniziano con snap .

find -name "snap*" -type d

Trovare file e directory con test e operatori

Ora che hai appreso le basi del find comando combinato con i test, è ora di fare un salto di qualità nella ricerca dei file. Forse è necessario trovare file o directory che soddisfano più di una condizione, come il nome e il tipo di file. In tal caso, devi combinare le condizioni.

Quando è necessario aggiungere più di una condizione per trovare i file, è possibile combinare le condizioni con gli operatori. Gli operatori sono elementi che consentono di combinare condizioni per formare test/filtri più complessi.

Combinazione di due condizioni con il -and Operatore

Forse hai bisogno di trovare alcuni file o directory che corrispondono a un nome specifico e genere. Per farlo, puoi usare il -and operatore. Il -and consente di combinare due o più espressioni e restituisce il risultato solo se il comando trova restituisce un valore true. Le espressioni sono le rappresentazioni di determinate condizioni, come quando si filtrano i file per nome (-name "snap" ).

Per dimostrare come il -and operatore combina due condizioni, esegui ciascuno dei seguenti comandi.

# Find files only (-type f) and (-and) ensure the names (-name) start with snap
# in the current directory and subdirectories.
find -name "snap*" -and -type f

# Find directories only (-type d) and (-and) ensure the names (-name) start with snap
# in the current directory and subdirectories.
find -name "snap*" -and -type d

# Find files only (-type f) and (-and) ensure the names (-name) start with snap
find -name "snap" -and -type f

# Find directories only (-type d) and (-and) ensure the names (-name) start with snap
find -name "snap" -and -type d

Combinazione di due condizioni con il -or Operatore

Come il -and operatore, il -or operatore (-o ) combina anche due espressioni separate. La differenza è che il find il comando produrrà risultati anche se solo un'espressione è vera.

Di seguito è riportata una sintassi di base su come combinare due condizioni con il -or operatore. Il find comando restituisce il risultato anche se solo uno, espr1 o espr2, restituisce un valore vero.

find  -or 

Forse ti piacerebbe trovare un nome di file usando il -name parametro di un tipo specifico utilizzando il -type parametro. In tal caso, esegui find comando seguente per cercare i file (-type f ) con nomi (-name ) che iniziano con snap -or chart .

find -name "snap*" -type f -or -name "chart*"

Filtraggio di file con -not Operatore

A differenza dei primi due operatori in cui filtri i contenuti che stai cercando, il -not operatore (! ) è il contrario. Il -not operatore esclude i file e le directory che non vuoi vedere nel risultato della ricerca.

Forse vuoi trovare file solo con nomi che non inizia con un nome specifico. In tal caso, eseguire il comando seguente. Nota il find il comando seguente cerca solo i file (-type f ), con nomi (-name ) che non inizia con snap .

find -not -name "snap*" -type f

Trovare file raggruppando espressioni

Ormai hai imparato come utilizzare test e operatori per filtrare il find risultato del comando. Ma cosa succede se il risultato target è un po' complesso? In tal caso, è necessario esaminare le espressioni di raggruppamento. Il Bash find Il comando consente di raggruppare le espressioni, il che significa definire due o più "insiemi" di condizioni.

Raggruppamento di espressioni con parentesi

Diciamo che devi trovare file o directory con nomi diversi. Presto scoprirai che l'attività è impossibile utilizzando il find nozioni di base sui comandi, come spiegato in precedenza. Come soluzione, dovrai utilizzare le parentesi per combinare le espressioni per formare un'unica espressione complessa.

In questo esempio di seguito, il find comando cercherà i file (-type f ) con .html interno o directory (-type d ) con nomi che iniziano con chart .

Sia le parentesi aperte che quelle chiuse vengono evitate con una barra rovesciata (\ ) per consentire al terminale di leggere letteralmente le parentesi. Il carattere di escape dice al find comando per trattare il personaggio alla lettera.

find \( -name "*.html" -type f \) -or \( -name "chart*" -type d \)

Invece di usare le parentesi, puoi anche usare le virgole per raggruppare espressioni come find -name "snap*" -type d -delete, -name "chart*" -print . Il raggruppamento di espressioni per virgole è fondamentalmente una serie di attività in esecuzione in un unico comando.

Ricerca di file dalla directory principale

In tutti gli esempi precedenti, Bash find comando ha trovato file solo dalla directory di lavoro corrente e da tutte le sottodirectory. Ma forse devi invece iniziare la tua ricerca nella directory principale. In tal caso, fornisci il -depth opzione un colpo. Il -depth parametro elenca i file e le directory in modo approfondito nel primo ordine, come mostrato di seguito.

Il find il comando seguente elenca i contenuti dalla directory principale prima e fino alla directory di lavoro (snap ).

find "snap" -depth

Trovare file e directory tramite autorizzazione

Invece di trovare file filtrati per nome e tipo, il comando find consente anche di trovare file e directory filtrati in base all'autorizzazione. In Linux, ogni file e cartella ha autorizzazioni specificate per proprietari, proprietari di gruppi e altri utenti. Il find Il comando ti consente di sfruttare queste autorizzazioni per filtrare il risultato della ricerca per file e directory con -perm opzione.

Prima di provare a trovare file e directory con il -perm opzione, dovrai familiarizzare con i permessi di lettura. Le autorizzazioni indicano chi ha accesso e può modificare determinati file e directory.

Trovare file tramite la modalità simbolica

Ora che hai compreso il concetto di autorizzazioni per i file, prova a trovare i file tramite la modalità simbolica. La modalità simbolica utilizza una combinazione di lettere e simboli per rappresentare i permessi dei file.

Per dimostrare come trovare file tramite la modalità simbolica, esegui ciascuno dei seguenti comandi.

# Find only files (-type f) in the working directory (.) 
# with read, write and execute permissions for user, group and others in the current
find . -perm u=rwx,g=rwx,o=rwx -type f

# Find files (-type f) in the working directory (.) 
# with any of the read, write and execute permissions (not the exact)
# for user, group and others in the current
find . -perm -u=rwx,g=rwx,o=rwx -type f

# Find files (including hidden files) where either of the user, group or others 
# have read, write and execute access to files in the working directory (.)
find . -perm /u=rwx,g=rwx,o=rwx -type f

Trovare file e directory in modalità assoluta

Se non preferisci trovare i file tramite la modalità simbolica, la modalità assoluta potrebbe suscitare il tuo interesse. La modalità assoluta definisce le autorizzazioni nella rappresentazione numerica ottale rispetto all'utilizzo di lettere.

Di seguito puoi vedere che la modalità simbolica -rwxrwxrwx è equivalente alla modalità assoluta 777 .

Supponiamo che tu voglia trovare solo file e directory con autorizzazione di sola lettura per utenti, gruppi e altri. In tal caso, esegui ciascuno dei comandi seguenti per vedere i risultati che otterrai quando trovi file e directory in modalità assoluta.

# Find files and directories only with read-only permission 
# for user, group and others in the working directory (.)
find . -perm 444

# Find files and directories only that have least the read-only permission 
# for user, group and others in the working directory (.)
find . -perm -444

# Find files and directories only (including hidden files and directories) 
# that have least the read-only permission 
# for user, group and others in the working directory (.)
find . -perm /444

Modifica l'output dei risultati della ricerca con il -print Parametro

Invece di visualizzare solo i percorsi dei file nel risultato della ricerca, forse vuoi vedere anche le loro proprietà. Usando il -print action, puoi modificare l'output del find comando produce.

Il -print parametro è il comportamento predefinito quando si esegue find comando in cui stampa il risultato della ricerca dei file, ciascuno su una nuova riga. Quindi eseguendo uno dei comandi seguenti su find file e directory denominati snap , otterrai lo stesso risultato.

find -name "snap" -print
find -name "snap"

Trovare e stampare nomi di file senza spazi bianchi

A differenza del -print predefinito parametro, il -print0 l'opzione ti consente di cancellare spazi bianchi o caratteri di nuova riga in un risultato di ricerca restituito da find comando. Soprattutto quando passi il risultato a un altro comando come grep per cercare modelli.

Il comando seguente ti consente di trovare e produrre una directory senza spazi bianchi o caratteri di nuova riga.

# Find a file or directory named 'snap', print the result
# removing white spaces and newline characters
find -name "snap" -print0

Trovare e stampare file con proprietà tramite formattazione di stampa

Per modificare il formato dell'output, il find il comando ha anche un -printf parametro. Questo parametro consente di creare direttive o "formatter" che definiscono l'aspetto del risultato della ricerca.

Forse è necessario trovare i file insieme alle loro proprietà come l'ultima volta che è stato effettuato l'accesso. In tal caso, esegui i seguenti comandi.

# Find files only with names starting with 'snap', then print each file 
# along with their last-time access properties, full path and filename
# each on a new line
find -name "snap*" -printf "%a %p \n"

# Find files with .html or .json extension 
# then print each file owner's username, group name, full path and filename
# each on a new line
find \( -name "*.html" -type f \) -or -name "*.json" -printf "%u %g %p \n"

Di seguito è riportato un elenco di direttive disponibili per lavorare fianco a fianco con -printf azione:

  • %a – Restituisce l'ultimo accesso a un file.
  • %b – Restituisce la quantità di spazio su disco utilizzato per un file in blocchi da 512 byte.
  • %d – Restituisce la profondità di un file nell'albero delle directory.
  • %g – Restituisce il nome del gruppo di un file o l'ID gruppo numerico se il gruppo non ha un nome.
  • %k – Restituisce la quantità di spazio su disco utilizzato per un file in blocchi da 1K.
  • %m – Restituisce i bit di autorizzazione di un file (in ottale).
  • %p – Restituisce il nome file esatto di un file.
  • %s – Restituisce la dimensione di un file in byte.
  • %t – Restituisce l'ora dell'ultima modifica di un file nel formato restituito da -ctime opzione.
  • %u – Restituisce il nome utente del proprietario di un file o l'ID utente numerico se l'utente non ha un nome.

Limitazione della profondità di ricerca dei file

Forse si desidera restringere ulteriormente e limitare la ricerca nelle directory; dovrai usare il -maxdepth opzione con il find comando, come mostrato di seguito.

Il -maxdepth il parametro dice al find comando per limitare l'ambito di ricerca solo a un certo numero di sottodirectory nell'albero delle directory.

# Find files and directories one step down from the working directory
find . -maxdepth 1 -name "chart*"

# Find files and directories two steps down from the ~/chart directory
find ~/chart -maxdepth 2 -name "chart"

Trovare file limitati alla directory di lavoro con -prune Opzione

Se devi limitare una ricerca alla sola directory di lavoro corrente e non ricorrere a nessuna sottodirectory, controlla il -prune parametro.

Nel comando seguente, find file e directory i cui nomi (-name ) non iniziano con snap ed è limitato (-prune ) nella directory di lavoro (. ).

Per ottenere risultati di ricerca per file e cartelle con nomi che iniziano con snap rimuovi invece il -or operatore e -print action , in questo modo:find . -name "snap*" -prune

find . -name "snap*" -prune -or -print

Trovare file e directory tramite Last Time Access

L'eliminazione di file particolari restringe sicuramente il risultato della ricerca. Ma cosa succede se l'unica cosa che ricordi del file che stai cercando è l'ultima volta che hai effettuato l'accesso a quel file? Bene, la buona notizia è che il comando trova ti consente di cercare file e directory tramite il loro ultimo accesso. Immergiamoci!

Ricerca di file tramite l'accesso dell'ultimo giorno del file

Diciamo che ricordi ancora l'ultimo giorno in cui hai effettuato l'accesso a un file o a una directory, quindi il -atime opzione combinata con il find il comando è tutto ciò di cui hai bisogno, come mostrato di seguito. Se l'ultimo accesso di un file non rientra nel valore specificato, il find il comando restituisce un valore falso e salta quel file.

# Find files and directories you last accessed between 2-3 days ago
find -atime 2

# Find files and directories you last accessed within the past 2 days
find -atime -2

# Find files and directories you last accessed within the past day
find -atime 0

Forse vuoi anche vedere l'ultimo accesso a un file o una directory, quindi aggiungi il -printf azione con direttive. La riga di comando seguente ti consente di find file consultati nell'ultimo giorno (-atime 0 ). Quindi il -printf action restituisce l'ultimo accesso (%a ) di file o directory e i nomi dei file (%p ), ciascuno su una nuova riga (\n ), come mostrato di seguito.

find -atime 2 -printf "%a %p \n"

Trovare file tramite l'accesso last minute di file

Diciamo che devi trovare i file in base al minuto. Come il -atime opzione, il -amin funziona allo stesso modo. Invece, otterrai risultati di ricerca per i file filtrati in base al loro ultimo accesso in base al valore che hai specificato, come mostrato di seguito.

# Find files and directories accessed within the past 40 minutes
# Not ideal most of the time as you will get result of tons of files and directories
find -amin 40

# Find directories accessed within the past 40 minutes
find -name "snap*" -type d -amin -40

# Find files accessed within the past 40 minutes
find -name "snap*" -type f -amin -40

Trovare file e directory tramite l'ultima modifica

Trovare file o directory tramite l'ultimo accesso può produrre tonnellate di risultati, che sembrerebbero confusi se i nomi dei file fossero simili. Quindi, per restringere ulteriormente il risultato della ricerca, vai con il -ctime opzione invece. Il -ctime l'opzione filtra il risultato della ricerca in base all'ultima volta che hai apportato modifiche al file o alla directory in base a un valore specificato (negli ultimi giorni).

Forse vuoi trovare i file che hai modificato gli ultimi due giorni fa. In tal caso, esegui i comandi di esempio riportati di seguito.

# Find files and directories you modifed in the past two days
find -ctime -2

# Find files and directories with names starting with 'snap'
# which you modifed in the past two days
find -name "snap*" -ctime -2

Esecuzione di un comando dopo aver trovato un file o una directory

Il find il comando non trova solo file e directory; può anche eseguire comandi subito dopo aver visualizzato i risultati della ricerca utilizzando il -exec parametro. Questa funzione è ottima per le volte in cui vuoi aprire un file in un editor di testo o rimuovere un file o una directory una volta trovato, ad esempio.

Assicurati di evitare il punto e virgola (; ) con una barra rovesciata (\ ) per impedirne l'interpretazione.

# Find a file named 'snap.doc' then open the file in vi editor
find -name "snap.doc" -exec vi {} \;

# Find a file named 'snap.doc' then remove the file
find -name "snap.doc" -exec rm {} \;

Rimozione di file e directory con -delete Azione

Il find comando non ti consente solo di trovare i file come hai imparato finora. Il find comando ti dà anche un'opzione per eliminare automaticamente un file una volta trovato. Forse è necessario eliminare file o directory vuoti con un nome specifico o corrispondenti a uno schema specifico. Quindi il find comando con il -delete l'azione tornerà sicuramente utile.

Per dimostrare l'eliminazione di file e directory con -delete azione, creare prima una directory e un file. Di seguito, le righe di comando ti consentono di creare (mkdir ) una directory denominata (thanos ), quindi un file denominato snap all'interno del thanos directory.

mkdir thanos
touch thanos/snap

Il -delete action cancella solo le directory vuote. Quindi, se provi a eliminare il thanos directory con la riga di comando in basso, riceverai un messaggio che dice trova:impossibile eliminare 'thanos':Directory non vuota.

Per eliminare un singolo file (snap ), specifica il -type test quando esegui il comando trova, in questo modo:find "snap" -type f -delete

# Find a directory named 'thanos', then delete the directory
# This command fails since the 'thanos' directory is not empty
find "thanos" -type d -delete

# Find a file named 'thanos.snap', then delete the file
find "thanos.snap" -type f -delete

Per eliminare ~/thanos directory, applica il -depth opzione, come mostrato di seguito. Il find il comando cercherà il thanos directory ed elimina ricorsivamente (-delete ) il contenuto di ~/thanos directory ed eliminare la directory stessa.

find "thanos" -depth -delete

Conclusione

Questo articolo mirava a insegnarti diversi modi su come il comando Bash find ti consente di individuare i file, ottenere le proprietà dei file e persino modificare un output in determinati formati. Prima, trovare un file perso era pieno di ostacoli lungo il percorso. Ma ora puoi saltare gli ostacoli e arrivare direttamente al traguardo:è considerato un imbroglio?

Bene, indipendentemente dal metodo con cui hai provato a trovare il tuo file, l'esperienza è sicuramente soddisfacente! Allora, quale test, azione o opzione hai trovato più interessante?


Linux
  1. Trova file e directory su Linux con il comando find

  2. Trovare file nella riga di comando (come fare per)

  3. Come controllare i permessi con il comando trova

  4. Come trovare file in CentOS 8 sulla riga di comando

  5. Come trovare file duplicati in Linux? L'aiuto è qui con il comando fdupes!

Come utilizzare il comando di lettura Bash

Come trovare file in Linux con il comando Trova

Come trovare file sulla riga di comando di Ubuntu

Come trovare file con il comando fd in Linux

Un modo semplice per unire i file con il comando Cat

Come scoprire le directory o i file che consumano più spazio?