Skip to main content

Trovare il comando Linux e Unix find

Corso di terminale linux - la shell (Giugno 2025)

Corso di terminale linux - la shell (Giugno 2025)
Anonim

Il comando Linux e Unix trova esegue una ricerca di file in una gerarchia di directory.

Sintassi per trova comando:

trova percorso … espressione

Descrizione

Questa pagina di manuale documenta la versione GNU di trova . Il comando trova ricerca l'albero della directory con radice su ciascun nome di file dato, valutando l'espressione data da sinistra a destra, secondo le regole di precedenza (vedere la sezione su Operatori sotto), fino a quando l'esito è noto; in altre parole, il lato sinistro è falso per e operazioni, vero per o , a quale punto trova passa al nome del file successivo.

Il primo argomento che inizia con:

  • -
  • ( o ),
  • !

è considerato l'inizio dell'espressione; qualsiasi argomento prima di essere percorsi per la ricerca e qualsiasi argomento dopo di esso sono il resto dell'espressione. Se non viene fornito alcun percorso, viene utilizzata la directory corrente. Se non viene data alcuna espressione, l'espressione -stampare viene usato.

Il trova il comando termina con lo stato 0 se tutti i file vengono elaborati correttamente, maggiore di 0 se si verificano errori.

espressioni

L'espressione è composta da opzioni (che influenzano l'operazione complessiva piuttosto che l'elaborazione di un file specifico e restituiscono sempre true), test (che restituiscono un valore vero o falso) e azioni (che hanno effetti collaterali e restituiscono un valore vero o valore falso), il tutto separato dagli operatori. L'espressione -e è assunto dove l'operatore è omesso. Se l'espressione non contiene azioni diverse da -fesso , poi -stampare viene eseguito su tutti i file per i quali l'espressione è vera.

Opzioni

Tutte le opzioni restituiscono sempre true. Hanno sempre effetto, piuttosto che essere elaborati solo quando viene raggiunto il loro posto nell'espressione. Pertanto, per maggiore chiarezza, è meglio posizionarli all'inizio dell'espressione.

-daystart Misura tempi (per -amin, -atime, -cmin, -ctime, -mmin, e -mtime ) dall'inizio di oggi piuttosto che da 24 ore fa.
-profondità Elabora i contenuti di ogni directory prima della directory stessa.
-Seguire Dereferenzia collegamenti simbolici. Implica -noleaf .
-Aiuto o --Aiuto Stampa un riepilogo dell'uso della riga di comando di trova e uscita.
-profondità massima numero Discendi al massimo numero di livelli (un numero intero non negativo) di directory al di sotto degli argomenti della riga di comando. L'espressione -maxdepth 0 significa solo applicare i test e le azioni agli argomenti della riga di comando.
-mindepth numero Non applicare test o azioni a livelli inferiori al numero (un numero intero non negativo). L'espressione -mindicesima 1 significa elaborare tutti i file tranne gli argomenti della riga di comando.
-montare Non discendere directory su altri file system. Un nome alternativo per -xdev , per compatibilità con alcune altre versioni di trova .
-noleaf Non ottimizzare assumendo che le directory contengano 2 sottodirectory in meno rispetto al loro conteggio degli hard link. *
-versione o --versione Stampa il trova numero di versione e uscita.
-xdev Non discendere directory su altri file system.

* Questa opzione è necessaria durante la ricerca di file system che non seguono la convenzione di collegamento alla directory Unix, come i filesystem CD-ROM o MS-DOS oi punti di montaggio del volume AFS. Ogni directory su un normale filesystem Unix ha almeno 2 hard link: il suo nome e il suo. (periodo) entrata. Inoltre, le sue sottodirectory (se presenti) hanno ciascuna. voce collegata a quella directory.

quando trova sta esaminando una directory, dopo che ha staccato due meno sottodirectory rispetto al conteggio dei collegamenti della directory, sa che il resto delle voci nella directory sono non-directory ( foglia file nell'albero delle directory). Se è necessario esaminare solo i nomi dei file, non è necessario indicarli; questo dà un significativo aumento della velocità di ricerca.

test

Gli argomenti numerici possono essere specificati come:

+ n Per più di n.
-n Per meno di n.
n Per esattamente n.
-amin n L'ultimo accesso al file n minuti fa.
-anewer file File è stato l'ultimo accesso più recentemente di file è stato modificato. -anewer è influenzato da -follow solo se -follow viene prima -anewer sulla riga di comando.
-atime n L'ultimo accesso al file n * 24 ore fa.
-cmin n Lo stato del file è stato modificato l'ultima volta n minuti fa.
-cnewer file Lo stato del file è stato modificato l'ultima volta più recentemente rispetto a quando il file è stato modificato.- cnewer è influenzato da -Seguire solo se -Seguire viene prima -cnewer sulla riga di comando.
-ctime n Lo stato del file è stato modificato l'ultima volta n * 24 ore fa.
-vuoto Il file è vuoto ed è un file normale o una directory.
ovvero falsi Sempre falso
-fstype tipo Il file si trova su un filesystem di tipo specificato. I tipi di filesystem validi variano tra le diverse versioni di Unix; un elenco incompleto di tipi di filesystem che sono accettati su alcune versioni di Unix o di un altro è: ufs, 4.2, 4.3, nfs, tmp, mfs, S51K, S52K. Puoi usare -printf con la direttiva% F per vedere i tipi di filesystem.
-gid n L'ID del gruppo numerico del file è n .
-group gname Il file appartiene al gruppo gname (ID gruppo numerico consentito).
-ilname pattern Come -lname, ma la corrispondenza è insensibile al maiuscolo / minuscolo.
-iname modello Piace -nome , ma la corrispondenza è insensibile al maiuscolo / minuscolo. Ad esempio, i modelli fo * e F ?? abbinare i nomi dei file foo , FOO , foo , fOO , eccetera.
-n n Il file ha il numero di inode n .
-ipath modello Piace -sentiero , ma la corrispondenza è insensibile al maiuscolo / minuscolo.
-iregex modello Come -regex, ma la corrispondenza è insensibile al maiuscolo / minuscolo.
-links n Il file ha n collegamenti.
-lname pattern Il file è un collegamento simbolico il cui contenuto corrisponde al modello di shell. I metacaratteri non trattano / o . appositamente.
-mmin n I dati del file sono stati modificati l'ultima volta n minuti fa.
-mtime n I dati del file sono stati modificati l'ultima volta n * 24 ore fa.
-name modello Base del nome del file (il percorso con le directory principali rimosse) corrisponde al modello di shell. I metacaratteri (*, ?, e ) non corrispondono a . all'inizio del nome base. Per ignorare una directory e i file sottostanti, utilizzare -fesso ; vedere un esempio nella descrizione di -sentiero .
-nuovo file Il file è stato modificato più recentemente di file . L'espressione -più nuovo è influenzato da -Seguire solo se -Seguire viene prima -più nuovo sulla riga di comando.
-nouser Nessun utente corrisponde all'ID utente numerico del file.
-nogroup Nessun gruppo corrisponde all'ID del gruppo numerico del file.
-path modello Il nome del file corrisponde al modello di shell modello . I metacaratteri non trattano / o . appositamente; quindi, per esempio,trova . -path './sr*sc stamperà una voce per una directory chiamata ./src/misc (se ne esiste una). Per ignorare un intero albero di directory, utilizzare -fesso piuttosto che controllare ogni file nell'albero. Ad esempio, per saltare la directory src / emacs e tutti i file e le directory sottostanti e stampare i nomi degli altri file trovati, fai qualcosa di simile a questo:trova . -path './src/emacs' -prune -o -print
-perm modalità I bit di autorizzazione del file sono esattamente modalità (ottale o simbolico). Le modalità simboliche utilizzano la modalità 0 come punto di partenza.
-perm -mode Tutti i bit di permesso modalità sono impostati per il file.
-perm + modalità Qualcuno dei bit di permesso modalità sono impostati per il file.
-regex modello Il nome del file corrisponde all'espressione regolare modello . Questa è una corrispondenza sull'intero percorso, non una ricerca. Ad esempio, per abbinare un file chiamato ./fubar3, puoi usare l'espressione regolare .*bar. o . * B. * 3, ma no b. * r3.
-size n bckw File utilizza n unità di spazio. Le unità sono blocchi da 512 byte per impostazione predefinita o se b segue n , byte se c segue n , kilobyte se k segue n o parole a 2 byte se w segue n . La dimensione non conta i blocchi indiretti, ma conta i blocchi nei file sparsi che non sono effettivamente allocati.
-vero Sempre vero.
-tipo c Il file è di tipo c :
B Block (buffered) speciale
c Personaggio (senza buffer) speciale
d elenco
p Named pipe (FIFO)
f File regolare
l Collegamento simbolico
S presa di corrente
D porta (Solaris)
-uido n L'ID utente numerico del file è n .
-uso n L'ultimo accesso al file n giorni dopo il suo stato è stato modificato l'ultima volta.
-utente uname Il file è di proprietà dell'utente il tuo nome (ID utente numerico consentito).
-xtype c Lo stesso di -genere a meno che il file non sia un collegamento simbolico. Per i collegamenti simbolici: se -Seguire non è stato dato, vero se il file è un collegamento a un file di tipo c ; Se -Seguire è stato dato, vero se c è l. In altre parole, per i collegamenti simbolici, -xtype controlla il tipo del file -genere non controlla.

Azioni

-exec comando ;

Eseguire comando ; true se viene restituito lo stato 0. Tutti i seguenti argomenti atrova sono considerati argomenti al comando fino a un argomento costituito da `; ' si incontra. La stringa `{} 'è sostituita dal nome del file corrente che viene elaborato ovunque si trovi negli argomenti del comando, non solo negli argomenti in cui è solo, come in alcune versioni ditrova. Entrambe queste costruzioni potrebbero aver bisogno di essere sfuggite (con un ` ') o quotate per proteggerle dall'espansione dalla shell. Il comando viene eseguito nella directory di partenza.

-fls file

Vero; come -ls ma scrivi a file come -fprint.

-fprint file

Vero; stampare il nome completo del file nel file file . Se file non esiste quandotrova è eseguito, è creato; se esiste, viene troncato. I nomi dei file `` / dev / stdout '' e `` / dev / stderr '' sono gestiti in modo speciale; si riferiscono rispettivamente all'uscita standard e all'uscita errore standard.

-fprint0 file

Vero; come -print0 ma scrivi a file come -fprint.

-fprintf file formato

Vero; come -printf ma scrivi a file come -fprint.

-ok comando ;

Come -exec ma chiedi prima all'utente (sullo standard input); se la risposta non inizia con `y 'o` Y', non eseguire il comando e restituisce false.

-stampare

Vero; stampare il nome completo del file sullo standard output, seguito da una nuova riga.

print0

Vero; stampare il nome completo del file sullo standard output, seguito da un carattere null.Ciò consente ai nomi di file che contengono newline di essere interpretati correttamente dai programmi che elaborano il filetrova produzione.

-printf formato

Vero; stampare formato sullo standard output, interpretando le direttive '' escapes e `% '. Le larghezze e le precisioni del campo possono essere specificate come con la funzione `printf 'C. A differenza di -print, -printf non aggiunge una nuova riga alla fine della stringa. Le fughe e le direttive sono:

un

Sveglia.

b

Backspace.

c

Interrompere immediatamente la stampa da questo formato e svuotare l'output.

f

Modulo di alimentazione.

n

Nuova linea.

r

Ritorno a capo

t

Scheda orizzontale.

v

Scheda verticale

\

Un backslash letterale (` ').

NNN

Il personaggio il cui codice ASCII è NNN (ottale).

Un carattere "" seguito da qualsiasi altro carattere viene trattato come un carattere normale, quindi entrambi vengono stampati.

%%

Un segno di percentuale letterale.

%un

L'ultimo tempo di accesso del file nel formato restituito dalla funzione C `ctime '.

%UN K

L'ultimo orario di accesso del file nel formato specificato da K , che è o "@" o una direttiva per la funzione C `strftime '. I possibili valori per K sono elencati di seguito; alcuni potrebbero non essere disponibili su tutti i sistemi, a causa delle differenze di `strftime 'tra i sistemi.

@

secondi dal 1 gennaio 1970, 00:00 GMT.

Campi temporali:

H

ora (00..23)

io

ora (01..12)

K

ora (0..23)

l

ora (1..12)

M

minuto (00..59)

p

locale AM ​​o PM

r

ora, 12 ore (hh: mm: ss AP M)

S

secondo (00..61)

T

ora, 24 ore (hh: mm: ss)

X

rappresentazione dell'ora locale (H: M: S)

Z

fuso orario (ad es. EDT) o nulla se non è possibile determinare il fuso orario

Campi data:

un

nome abbreviato del locale del locale (Sun..Sat)

UN

nome completo del giorno della settimana, lunghezza variabile (domenica … sabato)

B

nome del mese abbreviato di localizzazione (Jan..Dec)

B

nome del mese completo della locale, lunghezza variabile (gennaio … dicembre)

c

data e ora del locale (Sab 04 Nov 12:02:33 EST 1989)

d

giorno del mese (01..31)

D

data (mm / gg / aa)

h

come b

j

giorno dell'anno (001..366)

m

mese (01..12)

U

numero della settimana dell'anno con domenica come primo giorno della settimana (00..53)

w

giorno della settimana (0..6)

W

numero della settimana dell'anno con lunedì come primo giorno della settimana (00..53)

X

rappresentazione della data locale (mm / gg / aa)

y

ultime due cifre dell'anno (00..99)

Y

anno (1970 …)

b%

Dimensione del file in blocchi da 512 byte (arrotondati per eccesso).

% c

L'ultimo tempo di modifica dello stato del file nel formato restituito dalla funzione C `ctime '.

% C K

L'ultimo cambio di stato del file è nel formato specificato da K , che è lo stesso di% A.

% d

Profondità del file nell'albero delle directory; 0 significa che il file è un argomento della riga di comando.

% f

Nome del file rimosso da qualsiasi directory principale (solo l'ultimo elemento).

F%

Digitare il filesystem su cui si trova il file; questo valore può essere usato per -fstype.

% g

Nome del gruppo del file o ID del gruppo numerico se il gruppo non ha un nome.

G%

ID del gruppo numerico del file.

% h

Directory principali del nome del file (tutto tranne l'ultimo elemento).

% H

Argomento della riga di comando sotto il quale è stato trovato il file.

%io

Numero di inode del file (in decimale).

%K

Dimensione del file in blocchi 1K (arrotondato per eccesso).

l%

Oggetto del collegamento simbolico (stringa vuota se il file non è un collegamento simbolico).

% m

Bit di autorizzazione del file (in ottale).

% n

Numero di collegamenti reali al file.

% p

Nome del file.

% P

Nome del file con il nome dell'argomento della riga di comando in base al quale è stato rimosso.

%S

Dimensione del file in byte.

% t

L'ultima ora di modifica del file nel formato restituito dalla funzione C `ctime '.

% T K

L'ultima ora di modifica del file nel formato specificato da K , che è lo stesso di% A.

% u

Nome utente del file o ID utente numerico se l'utente non ha un nome.

% U

ID utente numerico del file.

Un carattere `% 'seguito da qualsiasi altro carattere viene scartato (ma viene stampato l'altro carattere).

-fesso

Se -depth non è dato, vero; non discendere la directory corrente.Se -depth è dato, falso; nessun effetto.

-ls

Vero; elenca il file corrente nel formato `ls -dils 'sullo standard output. I conteggi dei blocchi sono di blocchi 1K, a meno che non sia impostata la variabile di ambiente POSIXLY_CORRECT, nel qual caso vengono utilizzati blocchi da 512 byte.

operatori

Elencati in ordine di precedenza decrescente:

( espr )

Forza la precedenza.

! espr

Vero se espr è falso.

-non espr

Uguale a ! espr .

expr1 expr2

E (sottinteso); espr2 non viene valutato se expr1 è falso.

expr1 -un espr2

Uguale a expr1 expr2 .

expr1 -e espr2

Uguale a expr1 expr2 .

expr1 -o espr2

O; espr2 non viene valutato se expr1 è vero.

expr1 -o espr2

Uguale a expr1 -o espr2 .

expr1 , espr2

Elenco; tutti e due expr1 e espr2 sono sempre valutati. Il valore di expr1 viene scartato; il valore della lista è il valore di espr2 .

Esempi

trova / home -user joe

Trova tutti i file sotto la directory / home di proprietà dell'utente joe.

trova / usr -name * stat

Trova tutti i file sotto la directory / usr che termina con ".stat".

trova / var / spool -mtime +60

Trova tutti i file sotto la directory / var / spool che è stata modificata più di 60 giorni fa.

trova / tmp -name core -type f -print | xargs / bin / rm -f

Trova i file nominatinucleo in o sotto la directory/ tmp ed eliminali.Si noti che questo funzionerà in modo errato se ci sono nomi di file contenenti newline, virgolette singole o doppie o spazi.

trova / tmp -name core -type f -print0 | xargs -0 / bin / rm -f

Trova i file nominatinucleo in o sotto la directory/ tmp ed eliminarli, elaborando i nomi dei file in modo tale che i nomi di file o directory contenenti virgolette singole o doppie, spazi o newline siano gestiti correttamente. Il-nome il test viene prima del-genere test per evitare di dover chiamarestat (2) su ogni file.

trova . -type f -exec file '{}' ;

Esegue `file 'su ogni file in o sotto la directory corrente. Si noti che le parentesi graffe sono racchiuse tra virgolette singole per proteggerle dall'interpretazione come punteggiatura dello script della shell. Il punto e virgola è similmente protetto dall'uso di una barra rovesciata, sebbene ';' potrebbe essere stato usato anche in quel caso.

trova / (-perm -4000 -fprintf /root/suid.txt '% # m% u% p n' ), (-size + 100M -fprintf /root/big.txt '% -10s% p n' )

Attraversa il filesystem una volta sola, elencando i file setuid e le directory in/root/suid.txt e file di grandi dimensioni in/root/big.txt.

trova $ HOME -mtime 0

Cerca i file nella tua home directory che sono stati modificati nelle ultime ventiquattro ore. Questo comando funziona in questo modo perché il tempo trascorso dall'ultima modifica di ogni file è diviso per 24 ore e l'eventuale resto viene scartato. Ciò significa che per abbinare-mtime

0, un file dovrà avere una modifica in passato che è inferiore a 24 ore fa.

trova . -perm 664

Cerca i file che hanno permesso di leggere e scrivere per il proprietario e il gruppo, ma che altri utenti possono leggere ma non scrivere. I file che soddisfano questi criteri ma hanno altri bit di autorizzazioni impostati (ad esempio se qualcuno può eseguire il file) non saranno abbinati.

trova . -perm -664

Cerca i file che hanno permesso di leggere e scrivere per il loro proprietario e gruppo e quali altri utenti possono leggere, indipendentemente dalla presenza di bit di autorizzazione aggiuntivi (ad esempio il bit eseguibile). Questo corrisponderà ad un file che ha la modalità 0777, per esempio.

trova . -perm / 222

Cerca i file che sono scrivibili da qualcuno (il loro proprietario, o il loro gruppo o qualcun altro).

trova . -perm / 220 trova . -perm / u + w, g + w trova . -perm / u = w, g = w

Tutti e tre questi comandi fanno la stessa cosa, ma il primo usa la rappresentazione ottale della modalità file, e gli altri due usano la forma simbolica. Questi comandi cercano tutti i file che sono scrivibili dal loro proprietario o dal loro gruppo. I file non devono essere modificabili dal proprietario e dal gruppo da abbinare; o lo faranno.

trova . -perm -220 trova . -perm -g + w, u + w

Entrambi questi comandi fanno la stessa cosa; cerca i file che sono scrivibili sia dal loro proprietario che dal loro gruppo.

trova . -perm -444 -perm / 222! -perm / 111 trova . -perm -a + r -perm / a + w! -perm / a + x

Questi due comandi cercano entrambi i file che sono leggibili per tutti (-perm -444 o -perm -a + r), hanno almeno il bit di scrittura impostato (-perm / 222 o -perm / a + w) ma non sono eseguibili per chiunque (! -perm / 111 e! -perm / a + x rispettivamente)

Importante: Utilizzare il uomo comando ( % uomo ) per vedere come viene utilizzato un comando sul tuo computer specifico.