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.
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 ilname
parametro, ad esempiofind "snap"
è lo stesso difind -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 alfind
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 difind
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?