Skip to main content

Brug af Linux og Unix Command find

Diff • GitHub & Git Foundations (Juni 2026)

Diff • GitHub & Git Foundations (Juni 2026)
Anonim

Linux- og Unix-kommandoen finde udfører en søgning efter filer i et kataloghierarki.

Syntaks for finde kommando:

find sti … udtryk

Beskrivelse

Denne manuelle side dokumenterer GNU-versionen af finde . Kommandoen finde søger katalogtræet rodet ved hvert givet filnavn ved at evaluere det givne udtryk fra venstre til højre, i overensstemmelse med reglerne for forrang (se afsnittet om operatører nedenfor), indtil resultatet er kendt; med andre ord er venstre side forkert og operationer, sandt for eller , på hvilket tidspunkt finde Flytter til det næste filnavn.

Det første argument, der begynder med:

  • -
  • ( eller),
  • !

er taget til at være begyndelsen af ​​udtrykket; nogen argumenter før det er stier at søge, og eventuelle argumenter efter det er resten af ​​udtrykket. Hvis der ikke gives nogen stier, bruges den aktuelle mappe. Hvis der ikke gives udtryk, udtrykket -Print anvendes.

Det finde kommandoudgange med status 0, hvis alle filer behandles med succes, større end 0, hvis der opstår fejl.

Udtryk

Udtrykket består af valgmuligheder (som påvirker den generelle operation frem for behandling af en bestemt fil og altid returnerer sandt), tests (som returnerer en ægte eller falsk værdi) og handlinger (der har bivirkninger og returnerer en ægte eller falsk værdi), alle adskilt af operatører. Udtrykket -og antages, hvor operatøren udelades. Hvis udtrykket ikke indeholder andre handlinger end -prune , derefter -Print udføres på alle filer, for hvilke udtrykket er sandt.

Muligheder

Alle muligheder vender altid sandt tilbage. De træder altid i kraft, snarere end at blive behandlet først, når deres sted i udtrykket er nået. Derfor er det tydeligst at placere dem i begyndelsen af ​​udtrykket.

-daystart Måltider (for -amin, -atim, -cmin, -ctim, -minmin, og -mtime ) fra begyndelsen af ​​i dag snarere end fra 24 timer siden.
-dybde Behandle hver mappes indhold før selve mappen.
-følge efter Dereference symbolske links. Indebærer -noleaf .
-Hjælp eller --Hjælp Udskriv et resumé af kommandolinjebruget af finde og afslutte.
-maxdepth nummer Nedfald højst antal niveauer (et ikke-negativt heltal) af mapper under kommandolinjens argumenter. Udtrykket -maxdepth 0 betyder kun at anvende test og handlinger på kommandolinjens argumenter.
-mindepth nummer Anvend ikke test eller handlinger på niveauer mindre end antallet (et ikke-negativt heltal). Udtrykket -mindepth 1 betyder behandle alle filer undtagen kommandolinjens argumenter.
-mount Undgå at nedstille mapper på andre filsystemer. Et alternativt navn til -xdev , for kompatibilitet med nogle andre versioner af finde .
-noleaf Optimer ikke ved at antage, at mapper indeholder 2 færre underkataloger end deres hardlink count. *
-version eller --version Udskriv finde versionsnummer og exit.
-xdev Undgå at nedstille mapper på andre filsystemer.

* Denne indstilling er nødvendig, når du søger filsystemer, der ikke følger Unix-katalog-link-konventionen, f.eks. Cd-rom- eller MS-DOS-filsystemer eller AFS-volumenmonteringspunkter. Hver mappe på et normalt Unix-filsystem har mindst 2 hårde links: dets navn og dets. (periode) post. Derudover har hver sin underkatalog (hvis nogen). post tilknyttet denne mappe.

Hvornår finde undersøger en mappe, efter at den har statted to færre undermapper end mappens linktælling, ved den, at resten af ​​posterne i mappen er ikke-mapper ( blad filer i katalogtræet). Hvis kun filernes navne skal undersøges, er det ikke nødvendigt at registrere dem; dette giver en betydelig stigning i søgehastigheden.

Tests

Numeriske argumenter kan angives som:

+ n For større end n.
-n For mindre end n.
n For nøjagtigt n.
-amin n Filen blev senest fået adgang n minutter siden.
-anewer fil Filen blev senest åbnet for nylig end fil blev ændret. -Aewer er påvirket af -Følg kun, hvis -følgning kommer før -event på kommandolinjen.
-tid n Filen blev senest fået adgang n * 24 timer siden.
-cmin n Filens status blev sidst ændret n minutter siden.
-cnewer fil Filens status blev senest ændret for nylig, end filen blev ændret.- cnewer er påvirket af -følge efter kun hvis -følge efter kommer før -cnewer på kommandolinjen.
-tid n Filens status blev sidst ændret n * 24 timer siden.
-tom Filen er tom og er enten en almindelig fil eller en mappe.
-falsk Altid falsk.
-fstype type Filen er på et filsystem af specificeret type. De gyldige filsystemtyper varierer mellem forskellige versioner af Unix; En ufuldstændig liste over filsystemtyper, der accepteres på en version af Unix eller en anden, er: ufs, 4.2, 4.3, nfs, tmp, mfs, S51K, S52K. Du kan bruge -printf med% F-direktivet for at se typerne af dine filsystemer.
-gid n Filens numeriske gruppe-id er n .
-gruppe gname Fil tilhører gruppe gname (numerisk gruppe ID tilladt).
-navn mønster Ligesom -navn, men kampen er uhensigtsmæssig.
-iname mønster Synes godt om -navn , men kampen er uhensigtsmæssig. For eksempel mønstrene fo * og F ?? match filnavnet foo , FOO , foo , fOO , etc.
-inum n Filen har inode nummer n .
-path mønster Synes godt om -sti , men kampen er uhensigtsmæssig.
-iregex mønster Ligesom -regex, men kampen er uhensigtsmæssig.
-links n Filen har n links.
-l navn mønster Filen er et symbolsk link, hvis indhold matcher shell mønster. Metategnene behandler ikke / eller . specielt.
-minne n Filens data blev senest ændret n minutter siden.
-mtime n Filens data blev senest ændret n * 24 timer siden.
-navn mønster Base af filnavn (stien med de førende mapper fjernet) matcher skalmønster. Metategnene (*, ?, og ) svarer ikke til en . ved starten af ​​basisnavnet. Hvis du vil ignorere en mappe og filerne under den, skal du bruge -prune ; Se et eksempel i beskrivelsen af -sti .
-ny fil Filen blev ændret mere for nylig end fil . Udtrykket -newer er påvirket af -følge efter kun hvis -følge efter kommer før -newer på kommandolinjen.
-nouser Ingen bruger svarer til filens numeriske bruger-id.
-nogroup Ingen gruppe svarer til filens numeriske gruppe-id.
-path mønster Filnavn matcher skallemønster mønster . Metategnene behandler ikke / eller . specielt; så for eksempelfinde . -path './sr*sc vil udskrive en post for en mappe kaldet ./src/misc (hvis en findes). For at ignorere et helt katalogtræ skal du bruge -prune snarere end at kontrollere hver fil i træet. Hvis du f.eks. Vil springe over mappen src / emacs og alle filer og mapper under den, og udskrive navnene på de andre filer, der findes, skal du gøre noget som dette:finde . -path './src/emacs' -prune -o -print
-perm mode Filens tilladelsesbits er nøjagtigt mode (oktal eller symbolsk). Symboliske tilstande bruger tilstand 0 som udgangspunkt.
-perm-mode Alle tilladelsesbits mode er indstillet til filen.
-perm + -tilstand Enhver tilladelse bits mode er indstillet til filen.
-regex mønster Filnavn matcher almindeligt udtryk mønster . Dette er en kamp på hele stien, ikke en søgning. For eksempel at matche en fil ved navn ./fubar3, kan du bruge det regulære udtryk .*bar. eller . * F. * 3, men ikke b. * r3.
-størrelse n bckw Filanvendelser n enheder i rummet. Enhederne er som standard 512 byte blokke, eller hvis b følger n , bytes hvis c følger n , kilobytes hvis k følger n , eller 2-byte ord, hvis w følger n . Størrelsen tæller ikke indirekte blokke, men det tæller blokke i sparsomme filer, der ikke rent faktisk er tildelt.
-rigtigt Altid sandt.
-type c Filen er af typen c :
b Blok (bufret) speciel
c Karakter (unbuffered) speciel
d Vejviser
p Navngivet pipe (FIFO)
f Regelmæssig fil
l Symbolisk link
s Fatning
D dør (Solaris)
-uid n Filens numeriske bruger-id er n .
-brugt n Filen blev senest fået adgang n dage efter, at statusen sidst blev ændret.
-bruger uname Filen ejes af brugeren uname (numerisk bruger-id tilladt).
-type c Det samme som -type medmindre filen er et symbolsk link. For symbolske links: hvis -følge efter er ikke givet, sandt hvis filen er et link til en fil af typen c ; hvis -følge efter er blevet givet, sandt hvis c er l. Med andre ord, for symbolske links, -xtype kontrollerer typen af ​​filen, som -type tjekker ikke.

Handlinger

-exec kommando ;

Udfør kommando ; sandt, hvis 0 status returneres. Alle følgende argumenter tilfinde er taget til at være argumenter for kommandoen indtil et argument bestående af `; ' er stødt på. Strengen `{} 'erstattes af det aktuelle filnavn, der behandles overalt, det forekommer i argumenterne til kommandoen, ikke kun i argumenter, hvor det er alene, som i nogle versioner affinde. Begge disse konstruktioner skal muligvis undslippes (med et ` ') eller citeret for at beskytte dem mod udvidelse af skallen. Kommandoen udføres i startkatalogen.

-fls fil

Rigtigt; lignende-men skrive til fil som -fprint.

-fprint fil

Rigtigt; Udskriv det fulde filnavn i filen fil . Hvis fil eksisterer ikke, nårfinde køres, den er skabt; hvis den eksisterer, er den afkortet. Filnavnet `` / dev / stdout '' og `` / dev / stderr '' håndteres specielt; De refererer til henholdsvis standard output og standard fejl output.

-fprint0 fil

Rigtigt; gerne -print0 men skriv til fil som -fprint.

-fprintf fil format

Rigtigt; gerne -printf men skriv til fil som -fprint.

-Okay kommando ;

Ligesom -exec men spørg brugeren først (på standardindgangen); Hvis svaret ikke starter med 'y' eller 'Y', må du ikke køre kommandoen og returnere falsk.

-Print

Rigtigt; udskriv det fulde filnavn på standard output, efterfulgt af en newline.

-print0

Rigtigt; Udskriv det fulde filnavn på standard output, efterfulgt af et null-tegn.Dette tillader filnavne, der indeholder nye linjer, der skal fortolkes korrekt af programmer, der behandlerfinde produktion.

-printf format

Rigtigt; Print format på standard output, tolkning ` 'undslipper og`%' direktiver. Feltbredder og præcisioner kan specificeres som med `printf 'C-funktionen. I modsætning til -print, tilføjer -printf ikke en ny linje i slutningen af ​​strengen. De undslippe og direktiver er:

en

Alarmklokke.

b

Backspace.

c

Stop med at udskrive fra dette format med det samme og skub udgangen.

f

Form feed.

n

Ny linje.

r

Vognretur.

t

Horisontal faneblad.

v

Lodret faneblad.

\

En bogstavlig backslash (` ').

NNN

Tegnet, hvis ASCII-kode er NNN (oktal).

Et ` 'tegn efterfulgt af et hvilket som helst andet tegn behandles som en almindelig karakter, så de begge er trykt.

%%

Et bogstaveligt procent tegn.

%en

Filens sidste adgangstid i formatet, der returneres af C `ctime'-funktionen.

%EN k

Filens sidste adgangstid i det format, der er angivet af k , som enten er `@ 'eller et direktiv for C` strftime'-funktionen. De mulige værdier for k er anført nedenfor nogle af dem er muligvis ikke tilgængelige på alle systemer på grund af forskelle i `strftime 'mellem systemer.

@

sekunder siden 1. januar 1970, 00:00 GMT.

Tidsfelter:

H

time (00..23)

jeg

time (01..12)

k

time (0..23)

l

time (1..12)

M

minut (00..59)

p

locale AM ​​eller PM

r

tid, 12 timer (hh: mm: ss AP M)

S

anden (00..61)

T

tid, 24 timer (hh: mm: ss)

x

lokalitets tidsrepræsentation (H: M: S)

Z

tidszone (f.eks. EDT) eller intet, hvis ingen tidszone er bestemt

Datofelter:

-en

landets forkortede hverdagens navn (Sun..Sat)

EN

landets fulde ugedag navn, variabel længde (søndag .. lørdag)

b

lokals forkortede månedens navn (Jan ..Dec)

B

landets fulde måned navn, variabel længde (januar .. december)

c

locale dato og tid (lør nov 04 12:02:33 EST 1989)

d

dag i måneden (01..31)

D

dato (mm / dd / å)

h

samme som b

j

dag af året (001..366)

m

måned (01..12)

U

uge antal år med søndag som første dag i ugen (00..53)

w

dag i ugen (0..6)

W

uge antal år med mandag som første dag i ugen (00..53)

x

lokalitetens datorepræsentation (mm / dd / å)

y

sidste to cifre af året (00..99)

Y

år (1970 …)

% b

Filens størrelse i 512 byte blokke (afrundet).

% c

Filens sidste statusændringstid i formatet, der returneres af C `ctime'-funktionen.

% C k

Filens sidste statusændringstid i det format, der er angivet af k , hvilket er det samme som for% A.

% d

Filens dybde i katalogtræet; 0 betyder, at filen er et kommandolinjeprincip.

% f

Filens navn med eventuelle ledende mapper fjernet (kun det sidste element).

% F

Type af filsystemet filen er på; denne værdi kan bruges til -fstype.

% g

Filens gruppens navn eller numeriske gruppens id, hvis gruppen ikke har noget navn.

% G

Filens numeriske gruppe-id.

% h

Ledende mapper af filens navn (alt sammen med det sidste element).

% H

Kommandolinje argument under hvilken fil blev fundet.

%jeg

Filens inode nummer (i decimal).

% k

Filens størrelse i 1K blokke (afrundet).

% l

Objekt af symbolsk link (tom streng hvis fil ikke er et symbolsk link).

% m

Filens tilladelsesbits (i oktal).

% n

Antal hårde links til filen.

% p

Filens navn.

% P

Filens navn med navnet på kommandolinjeparametret, som det blev fundet fjernet.

% s

Filens størrelse i byte.

% t

Filens sidste modifikationstid i formatet, der returneres af C `ctime'-funktionen.

% T k

Filens sidste modifikationstid i det format, der er angivet af k , hvilket er det samme som for% A.

% u

Filens brugernavn eller numerisk bruger-id, hvis brugeren ikke har noget navn.

% U

Filens numeriske bruger-id.

Et `% 'tegn efterfulgt af et hvilket som helst andet tegn kasseres (men det andet tegn udskrives).

-prune

Hvis -dept er ikke givet, sandt; tag ikke ned den aktuelle mappe.Hvis -dept er givet, falsk; ingen effekt.

-Er

Rigtigt; liste nuværende fil i `ls-dils 'format på standard output. Bloktællingerne er af 1K blokke, medmindre miljøvariablen POSIXLY_CORRECT er indstillet, i hvilket tilfælde 512-byte blokke anvendes.

Operatører

Opført efter faldende forrang:

( expr )

Force forrang.

! expr

Sandt hvis expr er falsk.

-ikke expr

Samme som ! expr .

expr1 expr2

Og (underforstået); Udtr2 vurderes ikke, hvis Udtr1 er falsk.

Udtr1 -en Udtr2

Samme som expr1 expr2 .

Udtr1 -og Udtr2

Samme som expr1 expr2 .

Udtr1 -o Udtr2

Eller; Udtr2 vurderes ikke, hvis Udtr1 er sandt.

Udtr1 -eller Udtr2

Samme som Udtr1 -o Udtr2 .

Udtr1 , Udtr2

Liste; begge Udtr1 og Udtr2 er altid evalueret. Værdien af Udtr1 kasseres værdien af ​​listen er værdien af Udtr2 .

eksempler

find / home -user joe

Find hver fil under mappen / hjem ejet af brugeren joe.

find / usr-navn * stat

Find hver fil under mappen / usr, der slutter i ".stat".

find / var / spool -time +60

Find hver fil under mappen / var / spool, der blev ændret mere end 60 dage siden.

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

Find filer navngivetkerne i eller under biblioteket/ tmp og slet dem.Bemærk, at dette virker forkert, hvis der er filnavne, der indeholder nye linjer, enkelt eller dobbelt citater eller mellemrum.

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

Find filer navngivetkerne i eller under biblioteket/ tmp og slet dem, behandle filnavne på en sådan måde, at fil- eller mappenavne, der indeholder enkelt eller dobbelt citater, mellemrum eller nye linjer, håndteres korrekt. Det-navn test kommer før-type test for at undgå at skulle ringestat (2) på hver fil.

finde . -type f -exec-fil '{}' ;

Kører `fil 'på hver fil i eller under den aktuelle mappe. Bemærk, at bøjlerne er vedlagt i enkelt citatmærker for at beskytte dem mod fortolkning som skelscript-tegnsætning. Semikolonet er ligeledes beskyttet ved brug af en tilbageslag, men ';' kunne have været brugt i så fald også.

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

Traverse filsystemet blot én gang, notere setuid filer og mapper til/root/suid.txt og store filer til/root/big.txt.

find $ HOME -mtime 0

Søg efter filer i dit hjemmekatalog, der er blevet ændret i de sidste 24 timer. Denne kommando fungerer på denne måde, fordi tiden siden hver fil blev sidst ændret, er delt op i 24 timer, og resten bliver kasseret. Det betyder, at man skal matche-mtime

0, en fil bliver nødt til at have en ændring i fortiden, som er mindre end 24 timer siden.

finde . -perm 664

Søg efter filer, der har læse- og skrive tilladelse til deres ejer og gruppe, men hvilke andre brugere kan læse, men ikke skrive til. Filer, der opfylder disse kriterier, men har andre tilladelsesbits indstillet (for eksempel hvis nogen kan udføre filen) bliver ikke matchet.

finde . -perm -664

Søg efter filer, der har læse- og skrive-tilladelse til deres ejer og gruppe, og hvilke andre brugere kan læse uden hensyn til tilstedeværelsen af ​​ekstra tilladte bits (for eksempel den eksekverbare bit). Dette vil matche en fil, der har mode 0777, for eksempel.

finde . -perm / 222

Søg efter filer, der kan skrives af nogen (deres ejer, eller deres gruppe eller nogen andre).

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

Alle tre af disse kommandoer gør det samme, men den første bruger den oktale repræsentation af filtilstanden, og de to andre bruger den symbolske formular. Disse kommandoer alle søge efter filer, der kan skrives af enten deres ejer eller deres gruppe. Filerne behøver ikke skrives af både ejeren og gruppen, der skal matches; enten vil gøre.

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

Begge disse kommandoer gør det samme; Søg efter filer, der kan skrives af både deres ejer og deres gruppe.

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

Disse to kommandoer både søger efter filer, der kan læses for alle (-perm -444 eller -perm -a + r), har i det mindste skrivebitsæt (-perm / 222 eller -perm / a + w), men kan ikke eksekveres for nogen (! -perm / 111 og! -perm / a + x)

Vigtig: Brug mand kommando ( % mand ) for at se, hvordan en kommando bruges på din computer.