Skip to main content

Bruke Linux og Unix Command find

Writing 2D Games in C using SDL by Thomas Lively (Juni 2026)

Writing 2D Games in C using SDL by Thomas Lively (Juni 2026)
Anonim

Linux og Unix-kommandoen finne utfører et søk etter filer i et kataloghierarki.

Syntaks for finne kommando:

finn sti … uttrykk

Beskrivelse

Denne manuelle siden dokumenterer GNU-versjonen av finne . Kommandoen finne søker katalogtreet rotet ved hvert gitt filnavn ved å evaluere det gjeldende uttrykket fra venstre til høyre, i henhold til prioritetsreglene (se avsnittet om operatører nedenfor), til utfallet er kjent; med andre ord, venstre side er feil for og operasjoner, sant for eller , når finne går videre til neste filnavn.

Det første argumentet som begynner med:

  • -
  • ( eller),
  • !

er tatt for å være begynnelsen på uttrykket; noen argumenter før det er stier å søke, og eventuelle argumenter etter det er resten av uttrykket. Hvis ingen stier er gitt, brukes gjeldende katalog. Hvis ikke noe uttrykk er gitt, uttrykket -skrive ut benyttes.

De finne kommandoutganger med status 0 hvis alle filer behandles vellykket, større enn 0 hvis det oppstår feil.

Uttrykkene

Uttrykket består av alternativer (som påvirker den generelle operasjonen i stedet for behandling av en bestemt fil, og alltid tilbake sann), tester (som returnerer en sann eller falsk verdi) og handlinger (som har bivirkninger og returnerer en sann eller falsk verdi), alle adskilt av operatører. Uttrykket -og antas hvor operatøren utelates. Hvis uttrykket ikke inneholder andre handlinger enn -sviske , deretter -skrive ut utføres på alle filer som uttrykket er sant for.

alternativer

Alle valgene returnerer alltid sant. De får alltid virkning, i stedet for å bli behandlet bare når deres plass i uttrykket er nådd. Derfor, for klarhet er det best å plassere dem i begynnelsen av uttrykket.

-daystart Måltider (for -amin, -atim, -cmin, -ktim, -mmin, og -mtime ) fra begynnelsen av dagen i stedet for fra 24 timer siden.
-dybde Behandle hver katalog innhold før katalogen selv.
-Følg Dereference symbolske lenker. innebærer -noleaf .
-hjelp eller --hjelp Skriv ut et sammendrag av kommandolinjebruken av finne og avslutte.
-maxdepth Nummer Fjerne flest antall nivåer (et ikke-negativt heltall) av kataloger under kommandolinjeparametrene. Uttrykket -maxdepth 0 betyr bare å bruke testene og handlingene til kommandolinjeparametrene.
-mindepth nummer Ikke bruk noen tester eller handlinger på nivåer mindre enn tallet (et ikke-negativt heltall). Uttrykket -mindepth 1 betyr prosess alle filer unntatt kommandolinjeparametrene.
-mount Ikke sett ned kataloger på andre filsystemer. Et alternativt navn for -xdev , for kompatibilitet med noen andre versjoner av finne .
-noleaf Ikke optimaliser ved å anta at katalogene inneholder 2 færre underkataloger enn deres hardtalltall. *
-versjon eller --versjon Skriv ut finne Versjonsnummer og utgang.
-xdev Ikke sett ned kataloger på andre filsystemer.

* Dette alternativet er nødvendig når du søker i filsystemer som ikke følger Unix-katalogkoblingskonvensjonen, for eksempel CD-ROM- eller MS-DOS-filsystemer eller AFS-volummonteringspunkter. Hver katalog på et vanlig Unix-filsystem har minst 2 harde koblinger: dets navn og dets. (periode) oppføring. I tillegg har dets underkataloger (hvis noen) hver. oppføring knyttet til den katalogen.

Når finne undersøker en katalog, etter at den har statted to færre underkataloger enn katalogenes koblingstelling, vet den at resten av oppføringene i katalogen er ikke-kataloger ( blad filer i katalogtreet). Hvis bare filnavnene må undersøkes, er det ikke nødvendig å registrere dem. Dette gir en betydelig økning i søkhastigheten.

tester

Numeriske argumenter kan angis som:

+ n For større enn n.
-n For mindre enn n.
n For nøyaktig n.
-amin n Filen ble sist åpnet n minutter siden.
-anewer fil Filen ble sist tilgjengelig senere enn fil ble endret. -Aanvendelse er påvirket av -følg bare hvis -følg kommer før -event på kommandolinjen.
-tid n Filen ble sist åpnet n * 24 timer siden.
-cmin n Filens status ble sist endret n minutter siden.
-cnewer fil Filens status ble sist endret nylig enn filen ble endret.- cnewer påvirkes av -Følg bare hvis -Følg kommer før -cnewer på kommandolinjen.
-tid n Filens status ble sist endret n * 24 timer siden.
-tømme Filen er tom og er enten en vanlig fil eller en katalog.
-falsk Alltid feil.
-fstype type Filen er på et filsystem av spesifisert type. De gyldige filsystemtyper varierer mellom forskjellige versjoner av Unix; En ufullstendig liste over filsystemtyper som er akseptert på noen versjon av Unix eller en annen, er: ufs, 4.2, 4.3, nfs, tmp, mfs, S51K, S52K. Du kan bruke -printf med% F-direktivet for å se typene av filsystemene dine.
-gid n Filens numeriske gruppe-ID er n .
-group gname Fil tilhører gruppe gname (numerisk gruppe ID tillatt).
-navn mønster Liker -navn, men kampen er sak-følsom.
-iname mønster Som -Navn , men kampen er ikke sårbar. For eksempel, mønstrene fo * og F ?? match filnavnene foo , FOO , foo , foo , etc.
-num n Filen har inode nummer n .
-path mønster Som -sti , men kampen er ikke sårbar.
-iregex mønster Liker -regex, men kampen er sak-følsom.
-links n Filen har n koblinger.
-lnavn mønster Filen er en symbolsk lenke hvis innholdet samsvarer med skallemønsteret. Metategnene behandler ikke / eller . spesielt.
-minne n Filens data ble sist endret n minutter siden.
-mtime n Filens data ble sist endret n * 24 timer siden.
-navn mønster Base av filnavn (banen med de ledende katalogene fjernet) samsvarer med skallemønster. Metategnene (*, ?, og ) stemmer ikke overens med en . ved starten av basenavnet. For å ignorere en katalog og filene under den, bruk -sviske ; se et eksempel i beskrivelsen av -sti .
-behandle fil Filen ble endret nylig enn fil . Uttrykket -newer påvirkes av -Følg bare hvis -Følg kommer før -newer på kommandolinjen.
-nouser Ingen bruker tilsvarer filens numeriske bruker-ID.
-nogroup Ingen gruppe tilsvarer filens numeriske gruppe-ID.
-path mønster Filnavn matcher skallemønster mønster . Metategnene behandler ikke / eller . spesielt; så for eksempelfinn. -path './sr*sc vil skrive ut en oppføring for en katalog som heter ./src/misc (hvis en finnes). For å ignorere et helt katalogtreet, bruk -sviske i stedet for å sjekke hver fil i treet. For eksempel å hoppe over katalogen src / emacs og alle filer og kataloger under den, og skrive ut navnene til de andre filene som finnes, gjør noe slikt:finn. -path './src/emacs' -prune -o -print
-perm modus Filens tillatelsesbiter er nøyaktig modus (oktal eller symbolsk). Symboliske moduser bruker modus 0 som utgangspunkt.
-perm -modus Alle tillatelsebitene modus er angitt for filen.
-perm + -modus Enhver tillatelse biter modus er angitt for filen.
-regex mønster Filnavn samsvarer med vanlig uttrykk mønster . Dette er en kamp på hele banen, ikke et søk. For eksempel, for å matche en fil med navnet ./fubar3, kan du bruke det vanlige uttrykket . * Bar. eller . * F. * 3, men ikke b. * r3.
-størr n bckw Filbruk n enheter av plass. Enhetene er standard 512 byteblokker 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 teller ikke indirekte blokker, men det teller blokker i sparsomme filer som ikke er faktisk tildelt.
-ekte Alltid sant.
-type c Filen er av typen c :
b Blokk (buffret) spesiell
c Karakter (unbuffered) spesiell
d Directory
p Navngitt pipe (FIFO)
f Vanlig fil
l Symbolisk lenke
s Stikkontakt
D dør (Solaris)
-uid n Filens numeriske bruker-ID er n .
-brukt n Filen ble sist åpnet n dager etter at statusen sist ble endret.
-bruker uname Filen eies av brukeren uname (numerisk bruker ID tillatt).
-type c Det samme som -type med mindre filen er en symbolsk lenke. For symbolske lenker: hvis -Følg har ikke blitt gitt, sant hvis filen er en lenke til en fil av typen c ; hvis -Følg har blitt gitt, sant hvis c er l. Med andre ord, for symbolske lenker, -xtype sjekker typen av filen som -type sjekker ikke.

handlinger

exec kommando ;

Henrette kommando ; sant hvis 0 status returneres. Alle følgende argumenter tilfinne er tatt for å være argumenter for kommandoen til et argument bestående av `; ' er oppstått. Strengen `{} 'erstattes av det nåværende filnavnet som behandles overalt det forekommer i argumentene til kommandoen, ikke bare i argumenter der det er alene, som i noen versjoner avfinne. Begge disse konstruksjonene må kanskje bli rømt (med et ` ') eller sitert for å beskytte dem mot utvidelse av skallet. Kommandoen utføres i startkatalogen.

-fls fil

Ekte; liker-men skriv til fil liker -fprint.

-fprint fil

Ekte; skriv ut hele filnavnet i filen fil . Hvis fil eksisterer ikke nårfinne kjøres, den er opprettet; Hvis den eksisterer, blir den avkortet. Filnavnene `` / dev / stdout '' og `` / dev / stderr '' håndteres spesielt; De refererer til henholdsvis standard utgang og standard feilutgang.

-fprint0 fil

Ekte; like-print0 men skriv til fil liker -fprint.

-fprintf fil format

Ekte; liker -printf, men skriv til fil liker -fprint.

-OK kommando ;

Liker -exec men spør brukeren først (på standardinngangen); Hvis svaret ikke starter med "y" eller "Y", ikke kjør kommandoen, og returner falsk.

-skrive ut

Ekte; skriv ut hele filnavnet på standardutgangen, etterfulgt av en ny linje.

-print0

Ekte; skriv ut hele filnavnet på standardutgangen, etterfulgt av null-tegn.Dette tillater filnavn som inneholder nye linjer for å tolkes korrekt av programmer som behandlerfinne produksjon.

-printf format

Ekte; skrive ut format på standard utdata, tolking ` 'rømmer og`%' direktiver. Feltbredder og presisjoner kan spesifiseres som med `printf 'C-funksjonen. I motsetning til -print, legger ikke -printf til en ny linje på slutten av strengen. Rømmene og direktivene er:

en

Alarmklokke.

b

Tilbake.

c

Stopp utskrift fra dette formatet umiddelbart og spyle utgangen.

f

Form feed.

n

Ny linje.

r

Vognretur.

t

Horisontal faneblad.

v

Vertikal fan.

\

En bokstavelig tilbakemelding (` ').

NNN

Karakteren hvis ASCII-kode er NNN (oktal).

Et ` 'tegn etterfulgt av et annet tegn blir behandlet som en vanlig karakter, slik at de begge er skrevet ut.

%%

Et bokstavelig prosent tegn.

%en

Filens siste tilgangstid i formatet som returneres av C `ctime '-funksjonen.

%EN k

Filens siste tilgangstid i formatet spesifisert av k , som enten er `@ 'eller et direktiv for C` strftime'-funksjonen. De mulige verdiene for k er oppført nedenfor; Noen av dem er kanskje ikke tilgjengelige på alle systemer, på grunn av forskjeller i `strftime 'mellom systemer.

@

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

Tidsfelt:

H

time (00..23)

Jeg

time (01..12)

k

time (0..23)

l

time (1..12)

M

minutt (00 .. 59)

p

lokalens AM eller PM

r

tid, 12-timers (hh: mm: ss AP M)

S

andre (00..61)

T

tid, 24-timers (hh: mm: ss)

X

lokalens tidsrepresentasjon (H: M: S)

Z

tidssone (f.eks. EDT), eller ingenting hvis ingen tidssone er bestemt

Datofelt:

en

lokals forkortede ukedag navn (søndag …)

EN

lokals fulde ukedag navn, variabel lengde (søndag .. lørdag)

b

lokals forkortede månedsnavn (jan..de)

B

landets fulde måned navn, variabel lengde (januar .. desember)

c

lokal dato og klokkeslett (lør Nov 04 12:02:33 EST 1989)

d

dag i måneden (01..31)

D

dato (mm / dd / yy)

h

samme som b

j

dag av året (001..366)

m

måned (01..12)

U

uke antall år med søndag som første ukedag (00..53)

w

ukedag (0..6)

W

uke Antall år med mandag som første ukedag (00..53)

x

lokalnummerets datorepresentasjon (mm / dd / yy)

y

siste to sifre i året (00..99)

Y

år (1970 …)

% b

Filens størrelse i 512-byte blokker (avrundet).

% c

Filens siste statusendringstid i formatet som returneres av C `ctime-funksjonen.

% C k

Filens siste statusendringstid i formatet angitt av k , som er det samme som for% A.

% d

Filens dybde i katalogtreet; 0 betyr at filen er et kommandolinjeprøving.

% f

Filnavn med eventuelle ledende kataloger fjernet (bare det siste elementet).

% F

Type filsystem filen er på; denne verdien kan brukes til -fstype.

% g

Filens gruppenavn, eller numerisk gruppe-ID hvis gruppen ikke har noe navn.

% G

Filens numeriske gruppe-ID.

% h

Ledende kataloger av filens navn (alt annet enn det siste elementet).

% H

Kommandolinje argument under hvilken fil ble funnet.

%Jeg

Filens inode nummer (i desimal).

% k

Filens størrelse i 1K blokker (avrundet).

% l

Objekt av symbolsk lenke (tom streng hvis fil ikke er en symbolsk lenke).

% m

Filens tillatelsesbiter (i oktal).

% n

Antall hardt koblinger til fil.

% p-

Filnavn.

% P

Filens navn med navnet på kommandolinjeparametet der det ble funnet, ble fjernet.

% s

Filens størrelse i byte.

% t

Filens siste modifikasjonstid i formatet som returneres av C `ctime-funksjonen.

% T k

Filens siste modifikasjonstid i formatet angitt av k , som er det samme som for% A.

% u

Filens brukernavn, eller numerisk bruker-ID hvis brukeren ikke har noe navn.

% U

Filens numeriske bruker-ID.

Et «%» -tegn etterfulgt av et annet tegn blir kassert (men det andre tegnet skrives ut).

-sviske

Hvis -dept er ikke gitt, sant; Ikke sett ned gjeldende katalog.Hvis -dept er gitt, falsk; ingen effekt.

-Er

Ekte; liste gjeldende fil i `ls-dils 'format på standard utgang. Blokkertallene er av 1K blokker, med mindre miljøvariabelen POSIXLY_CORRECT er satt, i så fall brukes 512-byte blokker.

operatører

Oppført i rekkefølge av fallende forrang:

( expr )

Force forrang.

! expr

Sant om expr er falsk.

-ikke expr

Samme som ! expr .

expr1 expr2

Og (underforstått); expr2 er ikke vurdert om expr1 er falsk.

expr1 -en expr2

Samme som expr1 expr2 .

expr1 -og expr2

Samme som expr1 expr2 .

expr1 -o expr2

Eller; expr2 er ikke vurdert om expr1 er sant.

expr1 -eller expr2

Samme som expr1 -o expr2 .

expr1 , expr2

Liste; både expr1 og expr2 er alltid vurdert. Verdien av expr1 er kassert Verdien av listen er verdien av expr2 .

eksempler

finn / hjemme-bruker joe

Finn hver fil under katalogen / hjemme eid av brukeren joe.

finn / usr-navn * stat

Finn hver fil under katalogen / usr som slutter i ".stat".

finn / var / spool -time +60

Finn hver fil under katalogen / var / spool som ble endret for mer enn 60 dager siden.

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

Finn filer som heterkjerne i eller under katalogen/ tmp og slett dem.Vær oppmerksom på at dette vil fungere feil hvis det finnes noen filnavn som inneholder nybegynner, enkelt eller dobbelt anførselstegn eller mellomrom.

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

Finn filer som heterkjerne i eller under katalogen/ tmp og slette dem, behandle filnavn på en slik måte at fil eller katalognavn som inneholder enkle eller doble anførselstegn, mellomrom eller nye linjer, håndteres riktig. De-Navn testen kommer før-type test for å unngå å ringestat (2) på hver fil.

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

Kjører `fil 'på hver fil i eller under gjeldende katalog. Legg merke til at bøylene er vedlagt i enkelt sitatkarakterer for å beskytte dem mot tolkning som skriptskriftinterpunkt. Semikolonet er på samme måte beskyttet av bruk av et tilbakeslag, men ';' kunne også vært brukt i det tilfellet.

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

Traverse filsystemet bare en gang, noter setuid filer og kataloger inn i/root/suid.txt og store filer inn i/root/big.txt.

finn $ HOME -time 0

Søk etter filer i hjemmekatalogen din som har blitt endret i de siste tjuefire timer. Denne kommandoen virker på denne måten fordi tiden siden hver fil ble sist endret, er delt med 24 timer, og resten blir kassert. Det betyr at du skal matche-mtime

0, en fil må ha en endring i det siste som er mindre enn 24 timer siden.

finn. -perm 664

Søk etter filer som har lese- og skrive-tillatelse for eier og gruppe, men hvilke andre brukere kan lese, men ikke skrive til. Filer som oppfyller disse kriteriene, men har andre tillatelser bitsett (for eksempel hvis noen kan utføre filen) vil ikke bli matchet.

finn. -perm -664

Søk etter filer som har lese- og skrive-tillatelse for eier og gruppe, og hvilke andre brukere som kan lese, uten hensyn til forekomst av ekstra tillatelsesbiter (for eksempel kjørbar bit). Dette stemmer overens med en fil som har modus 0777, for eksempel.

finn. -perm / 222

Søk etter filer som kan skrives av noen (deres eier, eller deres gruppe, eller noen andre).

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

Alle tre kommandoene gjør det samme, men den første bruker den oktale representasjonen av filmodusen, og de andre to bruker symbolsk form. Disse kommandoer alle søke etter filer som kan skrives av enten deres eier eller deres gruppe. Filene må ikke skrives av både eieren og gruppen som skal matches; enten vil det gjøre.

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

Begge disse kommandoene gjør det samme; Søk etter filer som kan skrives av både eier og gruppe.

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

Disse to kommandoene søker både etter filer som er lesbare for alle (-perm -444 eller -perm -a + r), har i hvert fall skrivebitsett (-perm / 222 eller -perm / a + w), men kan ikke kjøres for noen (! -perm / 111 og! -perm / a + x)

Viktig: Bruke Mann kommando ( % Mann ) for å se hvordan en kommando brukes på din datamaskin.