Supponiamo che ci siano file con nomi:
batman.c
debate.c
cricketbat.c
Quale comando e come dovrei usarlo per elencare tutti questi file usando il tag di ricerca bat
?
Supponiamo che ci siano file con nomi:
batman.c
debate.c
cricketbat.c
Quale comando e come dovrei usarlo per elencare tutti questi file usando il tag di ricerca bat
?
Risposte:
bat
AnywherePer trovare tutti i file ovunque all'interno dei /path/to/folder
cui nomi siano presenti bat
, è possibile utilizzare:
find /path/to/folder -name '*bat*'
Ho citato il modello di ricerca *bat*
perché, se le quotazioni sono state omesse e file corrispondano *bat*
nella directory corrente, il guscio si espanderà *bat*
in una lista di loro e passare che a find
. Quindi find
non funzionerebbe bene. ( \*bat\*
e "*bat*"
funziona anche.)
Per cercare nella cartella in cui ci si trova attualmente (ad esempio, in cui è stato cd
editato), utilizzare .
, come al solito:
find . -name '*bat*'
Per cercare in tutto il computer, utilizzare/
. Per cercare la tua home directory, usa ~
o il nome completo della tua home directory. ( La shell si espande~
nel percorso completo della directory home.)
Se si desidera effettuare la ricerca è case-sensitive, quindi i file che contiene BAT
, bAt
e così via sono abbinati, utilizzare la -iname
prova al posto del -name
test di:
find /path/to/folder -iname '*bat*'
Ho notato che tutti i tuoi file finiscono .c
. Se vuoi solo trovare file del genere, usa:
find /path/to/folder -name '*bat*.c'
Ho notato che tutti i tuoi nomi di file hanno bat
o all'inizio o alla fine della parte che precede il .c
suffisso. Se si desidera evitare la corrispondenza di file come embattled.c
, è possibile utilizzare:
find /path/to/folder -name '*bat.c' -o -name 'bat*.c'
-o
è il o operatore .
Per trovare solo file normali, e non cartelle, collegamenti simbolici e nodi speciali del dispositivo, è possibile utilizzare -type f
. Questo è spesso raccomandato e talvolta abbastanza appropriato ... ma spesso non è quello che vuoi davvero , specialmente se stai correndo find
allo scopo di esaminare l'output da solo. Se avessi un collegamento simbolico corrispondente alla tua ricerca, non vorresti saperlo?
Se vuoi trovare sia file regolari che collegamenti simbolici, puoi usare:
find /path/to/folder -name '*bat*' \( -type f -o -type l \)
Quello usa il -o
operatore e anche le parentesi per il raggruppamento (che deve essere citato in modo che la shell non li tratti in modo speciale, altrimenti si otterrà un errore di sintassi).
Ma supponiamo che tu voglia vedere solo collegamenti simbolici che alla fine puntano a un file normale (e non collegamenti simbolici a directory, nodi di dispositivo, ecc.). In realtà è ancora più semplice: usare -xtype
invece di -type
. A condizione che non sta eseguendo find
con -L
la bandiera, -xtype
su un collegamento simbolico mette alla prova il tipo di file dei punti link.
find /path/to/folder -name '*bat*' -xtype f
Se si dispone di un collegamento simbolico a un altro collegamento simbolico a un file, -xtype f
lo corrisponderà anche se è diretto simbolico a un altro obiettivo è un altro simbolico anziché un file normale. Questo è quasi sempre quello che vuoi.
Spesso le persone pensano di volere -type f
, ma in realtà vogliono-xtype f
.
find
L 'azione predefinita se non ne specifichi una è -print
. Tutti i comandi sopra riportati sono equivalenti a se stessi con -print
virata alla fine.
find
viene spesso utilizzato per eseguire comandi in base ai file trovati, spesso comandi che apportano modifiche. Ma ci sono anche altre azioni il cui scopo è quello di visualizzare i risultati, oltre -print
. Di particolare interesse è -ls
:
find /path/to/folder -name '*bat*' -ls
Ciò fornisce informazioni dettagliate su ciascun file, in un formato a più colonne, simile (anche se non esattamente uguale) a quello che vedresti eseguendo .ls file
Per ulteriori informazioni find
e altri modi per trovare i file, vedere:
find
pagina del manuale , accessibile online o eseguendo man find
in un terminale.find
, locate
e xargs
utilità.-xtype
consiglio; forse ls *bat*
e -maxdepth
/ mindepth
vale anche la pena menzionare.
ls
già coperta , mi sono concentrato sul caso ricorsivo find
qui. Naturalmente, sarebbe utile anche una risposta dettagliata che includa un elenco non (o meno) ricorsivo di nomi di file che corrispondono a qualche modello ( ls
e find
con -maxdepth
). Potresti voler pubblicare una risposta del genere!
Il modo più semplice è correre
locate bat
In questo modo è possibile cercare in tutto il computer i file contenenti "bat" nel nome del file
Per aggiornare l'elenco dei file sul tuo PC
updatedb
Esegui questo comando quando hai aggiunto di recente nuovi file al tuo account
updatetdb
updatedb
stata eseguita l'ultima volta manualmente o automaticamente), è sudo updatedb
necessario eseguire prima, sì.
bat
.
find /
alle locate
ricerche da un database, mentre find
elenca ricorsivamente /
e quindi corrisponde al regex.
Aprire il terminale e modificare le directory nella directory da cui si desidera iniziare la ricerca, quindi eseguire questo comando:
find . -name "*bat*" -type f
Il .
avvia il comando find dalla directory corrente.
Il -name
Corrisponde alla stringa bat
ed è case sensitive. ( -iname
È case insensitive)
Le -type f
ricerche per solo i file.
Se i file si trovano nella directory corrente utilizzare:
$ ls *bat*
batgirl.c batman.c batwoman.c cricketbat.c
Oppure (per averli riga per riga):
$ ls -1 *bat*
batgirl.c
batman.c
batwoman.c
cricketbat.c
Se si desidera cercare tali file nel sistema, utilizzare:
$ find / -name "*bat*"
/path/to/cricketbat.c
/path/to/batgirl.c
/path/to/batwoman.c
/path/to/batman.c
Si desidera utilizzare il find
comando, con l' -iname
opzione per la corrispondenza dei nomi file senza distinzione tra maiuscole e minuscole o l' -name
opzione per le corrispondenze dei nomi file con distinzione tra maiuscole e minuscole. Entrambi ti consentiranno di utilizzare i nomi jolly. Quindi, per trovare qualsiasi nome di file che contenga "bat" dovresti usare:
find / -iname '*bat*'
O
find / -name '*bat*'
I *
significa "qualsiasi carattere (s)", così la ricerca è alla ricerca di bat
eventuali caratteri, inclusi nessuno, prima o dopo. Le /
ricerche dalla directory principale ricorsivamente, è possibile utilizzare .
che cercherà ricorsivamente dalla directory corrente o il percorso assoluto da dove si desidera cercare. Dai un'occhiata a come cercare file usando regex nello script della shell di linux
-type f
, che fa molto di più che semplicemente escludere le directory e spesso non è ciò che gli utenti vogliono davvero .
Usa il buon vecchio find
.
find <path_for_search> -type f -iname "*bat*"
per esempio.:
% find . -type f -iname "*bat*"
./batgirl.c
./batwoman.c
./cricketbat.c
./batman.c
da man find
:
-type c
File is of type c:
[..]
d directory
[..]
f regular file
[..]
-iname pattern
Like -name, but the match is case insensitive.