Linux- ja Unix-komennon käyttö: etsi

Linux- ja Unix- komento etsii tiedostojen etsintää hakemistohierarkiassa.

Hae komennon syntaksi:

löytää [polku ...] [lauseke]

Kuvaus

Tämä manuaalinen sivu dokumentoi GNU-version löydöstä . Komento etsii hakemistopuuta, joka on juurtunut kussakin annetusta tiedostonimestä arvioimalla annettu ilmaus vasemmalta oikealle ensisijaisuuden sääntöjen mukaisesti (ks. Jäljempänä operaattorit), kunnes lopputulos on tiedossa; Toisin sanoen vasemmanpuoleinen sivu on väärä ja toiminnot, jotka ovat tosia, tai missä vaiheessa haku siirtyy seuraavaan tiedostonimeen.

Ensimmäinen argumentti, joka alkaa:

on otettu lausekkeen alkuun; kaikki argumentit, ennen kuin se on polkuja etsimiseen, ja kaikki argumentit sen jälkeen, kun se on loput lausekkeesta. Jos polkuja ei anneta, käytetään nykyistä hakemistoa. Jos lauseketta ei anneta, käytetään ilmaisua -print .

Find- komento poistuu tilasta 0, jos kaikki tiedostot käsitellään onnistuneesti, yli 0, jos virheitä ilmenee.

expressions

Ilmaisu koostuu vaihtoehdoista (jotka vaikuttavat kokonaisoperaatioon tietyn tiedoston käsittelyn sijaan ja palaavat aina tosi), testeistä (jotka palauttavat todellisen tai väärän arvon) ja toimista (joilla on sivuvaikutuksia ja palauttavat todellisen tai väärä arvo), jotka kaikki erottavat operaattorit. Ilmaisu - ja oletetaan, jos operaattori jätetään pois. Jos lausekkeessa ei ole muita toimintoja kuin -prune , niin -print suoritetaan kaikille tiedostoille, joille lauseke on tosi.

vaihtoehdot

Kaikki vaihtoehdot palaavat aina totta. Ne tulevat aina voimaan, eikä niitä käsitellä vain, kun niiden paikka ilmaisuun on saavutettu. Siksi selkeyden vuoksi on parasta sijoittaa ne ilmauksen alkuun.

-daystart Mittausaikoja ( -amin, -aika, -cmin, -ctime, -min, ja -mtime ) tämän päivän alusta eikä 24 tuntia sitten.
-depth Jokaisen hakemiston sisältö käsitellään ennen hakemiston itse.
-follow Dereference symboliset linkit. Koskee -noleaf .
-auttaa tai - helpota Tulosta yhteenveto etsinnän ja lopettamisen komentorivin käytöstä.
-maxdepth [numero] Laske useimmilla tasolla (ei-negatiivinen kokonaisluku) komentorivin argumenttien alapuolella olevista hakemistoista. Ilmaus -maxdepth 0 tarkoittaa vain testien ja toimintojen soveltamista komentorivin argumentteihin.
-mindepth [numero] Älä käytä testejä tai toimintoja tasolle, joka on pienempi kuin numero (ei-negatiivinen kokonaisluku). Ilmaisu -mindepth 1 tarkoittaa prosessin kaikkia tiedostoja lukuun ottamatta komentorivin argumentteja.
-mount Älä laske muiden tiedostojärjestelmien hakemistoja. Vaihtoehtoinen nimi -xdev , joka on yhteensopiva jonkin muun version löydön kanssa.
option -noleaf Älä optimoi olettamalla, että hakemistoissa on 2 vähemmän alihakemistoja kuin niiden kovan linkin määrä. *
-versio tai -versio Tulosta löydetty versionumero ja poistu.
-xdev Älä laske muiden tiedostojärjestelmien hakemistoja.

* Tätä asetusta tarvitaan etsittäessä tiedostojärjestelmiä, jotka eivät noudata Unix-hakemiston linkkikokonaisuutta, kuten CD-ROM- tai MS-DOS-tiedostojärjestelmät tai AFS-tilavuusliitäntäpisteet. Jokaisella tavallisella Unix-tiedostojärjestelmällä on vähintään kaksi kovaa linkkiä: sen nimi ja sen nimi . (aika). Lisäksi sen alihakemistoilla (jos sellainen on) on kukin .. -merkintä, joka on linkitetty kyseiseen hakemistoon.

Kun haku tutkii hakemistoa sen jälkeen, kun se on tunnistanut kaksi alihakemistoa vähemmän kuin hakemiston linkkitiheys, se tietää, että muut hakemistossa olevat merkinnät ovat ei-hakemistoja ( lehtitiedostot hakemistopuussa). Jos vain tiedostojen nimet on tutkittava, niitä ei tarvitse tilata; tämä lisää huomattavasti hakunopeutta.

testit

Numeeriset argumentit voidaan määrittää seuraavasti:

+ n Yli n.
-n Vähintään n.
n Tarkalleen n.
-amin n Tiedostoa on viimeksi käytetty n minuuttia sitten.
-anewer [tiedosto] Tiedostoa käytettiin viime aikoina äskettäin kuin tiedostoa muutettiin. - Seuraa vain - jostain - seuraa ennen - komentoriviltä.
-aika n Tiedostoa on viimeksi käytetty n * 24 tuntia sitten.
-cmin n Tiedoston tila on viimeksi vaihdettu n minuuttia sitten.
-cnewer [tiedosto] Tiedoston tila on viimeksi muutettu viimeksi, kun tiedostoa muutettiin.
- cnewer vaikuttaa - seuraa vain, jos - seuraava tapahtuu ennen - komentaa komentoriviltä.
-määrä n Tiedoston tila on viimeksi muutettu n * 24 tuntia sitten.
-tyhjä Tiedosto on tyhjä ja se on joko tavallinen tiedosto tai hakemisto.
-väärä Aina väärä.
-tyyppi [tyyppi] Tiedosto on tiettyä tyyppiä oleva tiedostojärjestelmä. Kelvolliset tiedostojärjestelmätyypit vaihtelevat eri Unix-versioiden välillä; epätäydellinen luettelo tiedostojärjestelmätyypeistä, jotka hyväksytään jonkin Unix-version versiossa, ovat: ufs, 4.2, 4.3, nfs, tmp, mfs, S51K, S52K. Voit käyttää% F -direktiiviä -printf nähdäksesi tiedostojärjestelmiesi tyypit.
-gid n Tiedoston numeerinen ryhmä ID on n .
-ryhmä [gname] Tiedosto kuuluu ryhmän gname (sallittu numeerinen ryhmä ID).
-ilname [kuvio] Kuten -nimeä, mutta ottelu ei kaihdo.
-iname [kuvio] Kuten - nimi , mutta ottelu ei ole kelvollinen. Esimerkiksi kuviot fo * ja F? sopivat tiedostonimet Foo , FOO , foo , fOo jne.
-inum n Tiedostossa on inode-luku n .
-pyörä [kuvio] Kuten -path , mutta ottelu on koteloherkkä .
-regex [kuvio] Kuten -regex, mutta ottelu on tapauksettomat.
-links n Tiedostossa on n linkkejä.
- nimi [kuvio] Tiedosto on symbolinen linkki, jonka sisältö vastaa kuorimallia. Metakarakterit eivät käsittele / tai . erityisesti.
-mmin n Tiedoston tiedot on viimeksi muutettu n minuuttia sitten.
-mtime n Tiedoston tiedot on viimeksi muutettu n * 24 tuntia sitten.
-nimi [kuvio] Tiedoston nimen pohja (polku, jossa johtavat hakemistot poistetaan) vastaa kuorikuvausta. Metakarakterit ( * ,? Ja [] ) eivät täsmää . perusnimen alussa. Jos haluat jättää hakemiston ja sen alla olevat tiedostot, käytä -prune ; katso esimerkki -path- kuvauksessa.
-newer [tiedosto] Tiedostoa on muokattu hiljattain kuin tiedosto . Ilmaisu -newer vaikuttaa - seuraa vain, jos - seuraava tulee - uudempi komentorivillä.
-nouser Yksikään käyttäjä ei vastaa tiedoston numeerista käyttäjätunnusta.
-nogroup Ryhmä ei vastaa tiedoston numeerista ryhmätunnusta.
-path [kuvio] Tiedoston nimi sopii kuorikuvioksi. Metakarakterit eivät käsittele / tai . erityisesti; niin esimerkiksi löytää. -path './sr*sc tulostaa merkinnän nimeltä ./src/misc (jos sellainen on olemassa). Jos haluat jättää koko hakemistopuun puutteen, käytä -prune eikä tarkistaa kaikkia puun tiedostoja. Jos haluat esimerkiksi ohittaa hakemiston src / emacs ja kaikki sen tiedostot ja hakemistot ja tulostaa muiden löydettyjen tiedostojen nimet, tee jotain tällaista: etsi. -Path './src/emacs' -prune -o -print
-perm [tila] Tiedoston lupabitit ovat täsmälleen [mode] (oktaali tai symbolinen). Symboliset tilat käyttävät tilaa 0 lähtökohtana.
-perm -mode Tiedostoon on määritetty kaikki permits bitit [mode] .
-perm + -tila Tiedostoon on määritetty mikä tahansa lupa bittiä [tilaa] .
-regex [kuvio] Tiedoston nimi vastaa säännöllistä lausekuvausta . Tämä on ottelu koko polun, ei haun. Jos haluat esimerkiksi sovittaa tiedoston nimeltä ./fubar3, voit käyttää säännöllistä lauseketta *. tai . * b. * 3 , mutta ei b. * r3 .
-size n [bckw] Tiedosto käyttää n yksikköä tilaa. Yksiköt ovat oletusarvoisesti 512-tavuisia lohkoja tai jos b seuraa n , tavua, jos c seuraa n , kilobytejä, jos k seuraa n tai 2 tavun sanaa, jos w seuraa n . Koko ei laske epäsuoria lohkoja, mutta se laskee lohkot harvaan tiedostoihin, joita ei ole tosiasiallisesti allokoitu.
-totta Aina totta.
-tyyppi c Tiedosto on tyyppiä c :
b Estä (puskuroitu) erityinen
C Merkki (puskuroimaton) erikoinen
d hakemisto
p Nimetty putki (FIFO)
f Säännöllinen tiedosto
l Symbolinen linkki
s pistorasia
D ovi (Solaris)
-v Tiedoston numeerinen käyttäjätunnus on n .
käytettiin n Tiedostoa käytettiin viimein n päivää sen tilan viimeisen muuttamisen jälkeen.
- käytä uname Tiedoston omistaja on käyttäjän uname (sallittu numeerinen käyttäjätunnus).
-xtype c Sama kuin -tyy, ellei tiedosto ole symbolinen linkki. Symbolisten linkkien osalta: if -take ei ole annettu, true, jos tiedosto on linkki tiedostolle c ; jos - seuraa on annettu, totta jos c on l. Toisin sanoen, symbolisten linkkien,
-xtype tarkistaa tiedoston tyypin, jota -tyyppi ei tarkista.

Toimet

-exec- komento ;

Suorita komento ; true, jos 0-tila palautetaan. Kaikki seuraavat löydettävät argumentit otetaan komentojen argumentteiksi, kunnes argumentti, joka koostuu ";" on havaittu. Merkki "{}" korvataan nykyisellä tiedostonimellä, jota käsitellään kaikkialla, missä se esiintyy komentojen argumentteissa, ei vain argumentteissa, joissa se on yksin, kuten joissakin muunnoksissa. Molemmat näistä rakenteista saattavat joutua pakenemaan (`\ ') tai lainattuna suojaamaan niitä laajennuksesta. Komento suoritetaan lähtöhakemistossa.

-fls- tiedosto

Totta; kuten -ls mutta kirjoittaa tiedostolle kuin -fprint.

-fprint- tiedosto

Totta; tulosta koko tiedoston nimi tiedostoksi . Jos tiedostoa ei ole olemassa, kun haku on suoritettu, se luodaan; jos se on olemassa, se on katkaistu. Tiedostonimet `` / dev / stdout '' ja `` / dev / stderr '' käsitellään erityisesti; ne viittaavat vakiotulosteeseen ja vakiovirheen lähtöön, vastaavasti.

-fprint0- tiedosto

Totta; kuten -print0 mutta kirjoittaa tiedostolle kuten -fprint.

-fprintf- tiedostomuoto

Totta; kuten -printf mutta kirjoittaa tiedostoon kuin -fprint.

-ok komento ;

Kuten -exec, mutta kysy ensin käyttäjältä (vakiotuloon); jos vastaus ei käynnisty "y": llä tai "Y": llä, älä suorita komentoa ja palaa vääräksi.

-Tulosta

Totta; tulosta koko tiedoston nimi vakiotulosteeseen, jota seuraa rivinvaihto.

-print0

Totta; tulosta koko tiedoston nimi vakiotulosteeseen, jota seuraa nolla-merkki. Tämä sallii tiedostojen nimet, jotka sisältävät uusia viivoja, jotta tulkkausohjelmat käsittelevät ohjelmat tulkitsevat oikein.

-printf- muodossa

Totta; tulostusformaatti vakiotulosteessa, tulkinta `\ 'pakenee ja`%' -direktiivit. Kentän leveydet ja tarkkuudet voidaan määrittää kuten 'printf' C -toiminnolla. Toisin kuin -print, -printf ei lisää merkkijonon loppupäätä. Pakot ja direktiivit ovat:

\

Hälytyskello.

\ b

Askelpalautin.

\ c

Lopeta tulostus heti tästä muodosta ja huuhtele tulostus.

\ f

Lomake syöte.

\ n

Uusi rivi.

\ r

Kuljetuksen palautus.

\ t

Vaaka-välilehti.

\ v

Pystysuora välilehti.

\\

Kirjaimellinen kääntöviiva (`\ ').

\ NNN

Merkki, jonka ASCII-koodi on NNN (oktaali).

Merkki, jota seuraa jokin muu merkki, käsitellään tavallisena merkkinä, joten molemmat tulostetaan.

%%

Kirjaimellinen prosenttiluku.

% A

Tiedoston viimeinen käyttöaika C `ctime -toiminnossa palautetulla tavalla.

% A k

Tiedoston viimeinen käyttöaika k: n määrittämässä muodossa, joka on joko "@" tai C "strftime" -toimintoa koskeva direktiivi. Alla luetellut mahdolliset arvot ovat alla; jotkut niistä eivät ehkä ole käytettävissä kaikissa järjestelmissä, koska järjestelmien väliset erot ovat "strftime" -tyyppisiä.

@

sekunnin jälkeen 1. tammikuuta 1970, 00:00 GMT.

Aikakentät:

H

tunti (00..23)

minä

tunti (01..12)

K

tunti (0..23)

l

tunti (1..12)

M

minuutti (00..59)

p

locale-AM tai PM

R

aika, 12 tuntia (hh: mm: ss [AP] M)

S

toinen (00..61)

T

aika, 24 h (hh: mm: ss)

X

locale-ajan esitys (H: M: S)

Z

aikavyöhyke (esim. EDT) tai mitään, jos aikavyöhykettä ei voida määrittää

Päivämääräkentät:

paikallisen lyhennetyn arkipäivän nimi (Sun..Sat)

locale: n koko viikonpäivä nimi, muuttuva pituus (sunnuntai ... sunnuntai)

b

locale-lyhennetyn kuukauden nimi (Jan..Dec)

B

locale-koko kuukauden nimi, muuttuva pituus (tammikuu-joulukuu)

C

locale's date and time (kta marraskuu 04 12:02:33 EST 1989)

d

kuukauden päivä (01..31)

D

päivämäärä (mm / pp / vv)

h

sama kuin b

j

päivä (001..366)

m

kuukausi (01..12)

U

viikon lukuvuosi sunnuntaina viikon ensimmäisenä päivänä (00..53)

w

viikonpäivä (0..6)

W

viikkovuoden numero maanantaina viikon ensimmäisenä päivänä (00..53)

x

paikallisen päivämäärän esitys (mm / pp / vv)

y

viimeiset kaksi numeroa vuodessa (00..99)

Y

vuosi (1970 ...)

% b

Tiedoston koko 512 tavun lohkossa (pyöristetty ylöspäin).

% C

Tiedoston viimeinen tilan muutosaika C `ctime -toiminnolla palautetun muodon mukaan.

% C k

Tiedoston viimeinen tilan muutosaika k: n määrittämässä muodossa, joka on sama kuin% A.

% d

Tiedoston syvyys hakemistopuun puitteissa; 0 tarkoittaa, että tiedosto on komentorivin argumentti.

% f

Tiedoston nimi, josta kaikki johtavat hakemistot on poistettu (vain viimeinen elementti).

% F

Tiedostojärjestelmän tyyppi tiedoston ollessa päällä; tätä arvoa voidaan käyttää -fstype.

% g

Tiedoston ryhmän nimi tai numeroryhmän tunnus, jos ryhmällä ei ole nimeä.

% G

Tiedoston numeerinen ryhmän tunnus.

% h

Tiedostonimen johtavat hakemistot (kaikki, mutta viimeinen elementti).

% H

Komentorivi argumentti, jonka alla tiedosto löydettiin.

% i

Tiedoston inode-numero (desimaalina).

% k

Tiedoston koko 1 k-lohkossa (pyöristetty ylös).

% l

Symbolisen linkin kohde (tyhjä merkkijono, jos tiedosto ei ole symbolinen linkki).

% m

Tiedoston lupabitit (oktaalina).

% n

Kovien linkkien määrä tiedostoon.

% p

Tiedoston nimi.

% P

Tiedoston nimi komentorivin argumentin nimellä, jonka perusteella se löydettiin.

% s

Tiedoston koko tavuina.

% t

Tiedoston viimeisin muokkausaika C `ctime -toiminnossa palautetulla tavalla.

% T k

Tiedoston viimeisin muokkausaika k: n määrittämässä muodossa, joka on sama kuin% A.

% u

Tiedoston käyttäjänimi tai numeerinen käyttäjätunnus, jos käyttäjälle ei ole nimeä.

% U

Tiedoston numeerinen käyttäjätunnus.

Hylätään merkki "%", jota seuraa jokin muu merkki, mutta toinen merkki tulostuu.

-karsia

Jos -poikaa ei anneta, totta; älä laske nykyistä hakemistoa.
Jos -epäisyys on annettu, väärä; ei vaikutusta.

-Onko

Totta; luettelo nykyisestä tiedostosta `ls -dils '-muodossa vakiotulosteessa. Lohkokertoimet ovat 1K lohkoja, ellei asetettu ympäristömuuttuja POSIXLY_CORRECT, jolloin käytetään 512-tavuisia lohkoja.

operaattorit

Listattu alenevassa järjestyksessä:

( expr )

Pakota etusija.

! expr

Todellinen jos expr on väärä.

- ei expr

Sama kuin ! ekspr .

expr1 expr2

Ja (implisiittinen); expr2 ei arvioida, jos expr1 on väärä.

expr1 -a expr2

Sama kuin expr1 expr2 .

expr1 ja expr2

Sama kuin expr1 expr2 .

ekspr1- o expr2

Tai; expr2 ei arvioida, jos ekspr1 on tosi.

expr1 tai expr2

Sama kuin expr1- o expr2 .

expr1 , expr2

Lista; sekä expr1 että expr2 arvioidaan aina. Expr1: n arvo hylätään; luettelon arvo on expr2: n arvo.

esimerkit

löytää / home-user joe

Etsi jokainen tiedosto käyttäjän joen omistamassa hakemistossa / kotona.

Etsi / usr -name * stat

Etsi jokainen tiedosto hakemistossa / usr päättyy ".stat".

etsi / var / spool -mtime +60

Etsi kaikki tiedostot hakemistosta / var / spool, joka on muokattu yli 60 päivää sitten.

etsi / tmp-nimi ydin -tyy f -print | xargs / bin / rm-f

Etsi hakemistosta / tmp: stä nimetyt tiedostot ja poista ne. Huomaa, että tämä toimii väärin, jos on olemassa tiedostoja, jotka sisältävät uusia viivoja, yksittäisiä tai kaksinkertaisia ​​lainauksia tai välilyöntejä.

etsi / tmp -name ydin -tyyppi f -print0 | xargs -0 / bin / rm-f

Etsi hakemistosta / tmp : stä tai sen alapuolelta nimettyjä tiedostoja ja poista ne, käsittele tiedostonimiä siten, että tiedosto- tai hakemistomerkinnät, joissa on yksi tai kaksinkertainen lainausmerkki, välilyönnit tai uudet rivit, käsitellään oikein. Nimi- testi tulee ennen tyyppitestistä , jotta vältettäisiin stat (2) kutsuminen jokaiseen tiedostoon.

löytö . -tyy f -exec-tiedosto '{}' \;

Käynnistää `file 'jokaisella tiedostolla nykyiseen hakemistoon tai sen alle. Huomaa, että pidikkeet ovat suljettuina yksittäisiin lainausmerkkeihin, jotta ne voidaan suojata tulkinnalta komentosarjan komentosarjoina. Puolipiste on samalla tavalla suojattu kääntöpuolella, vaikka ";" olisi voinut käyttää myös tässä tapauksessa.

\\ (-size + 100M -fprintf /root/big.txt '% -10s% \ "% u% u% u% p \ p \ n '\)

Siirrä tiedostojärjestelmä vain kerran, lisäämällä asetettujen tiedostojen ja hakemistojen hakemistoon /root/suid.txt ja suurille tiedostoille /root/big.txt .

Etsi $ HOME -aika 0

Etsi kotihakemistosi tiedostoja, joita on muokattu viimeisen 24 tunnin aikana. Tämä komento toimii tällä tavalla, koska jokaisen tiedoston viimeisin muutosaika on jaettu 24 tunnilla ja loput hylätään. Tämä tarkoittaa sitä, että se sopii ajankohtaan

0 , tiedoston täytyy olla aiemmin muutettu, joka on alle 24 tuntia sitten.

löytö . -perm 664

Etsi tiedostoja, joilla on lukea ja kirjoittaa lupaa omistajalle ja ryhmälle, mutta jotka muut käyttäjät voivat lukea, mutta ei kirjoittaa. Tiedostot, jotka täyttävät nämä kriteerit, mutta joilla on muita käyttöoikeusbittejä (esimerkiksi jos joku voi suorittaa tiedoston), ei sovita yhteen.

löytö . -perm -664

Etsi tiedostoja, joilla on lukea ja kirjata lupaa omistajalle ja ryhmälle, ja mitä muita käyttäjiä voi lukea, ottamatta huomioon ylimääräisiä lupasiteitä (esimerkiksi suoritettava bitti). Tämä vastaa tiedostoa, jolla on esimerkiksi tila 0777.

löytö . -perm / 222

Etsi tiedostoja, jotka joku voi kirjoittaa (omistajansa, ryhmänsä tai kenenkään muun).

löytö . -perm / 220 löytää. -perm / u + w, g + w löytää. -perm / u = w, g = w

Kaikki kolme näistä komennoista tekevät samoin, mutta ensimmäinen käyttää tiedostomuodon oktaalin esitystä ja kaksi muuta symbolista muotoa. Nämä komennot etsivät tiedostoja, jotka joko omistajansa tai heidän ryhmänsä voivat kirjoittaa. Tiedostojen ei tarvitse kirjoittaa sekä omistajan että ryhmän mukaan, joko tekevät.

löytö . -perm -220 löytää. -perm -g + w, u + w

Molemmat käskyt tekevät samoin; etsiä tiedostoja, jotka sekä omistajansa että heidän ryhmänsä voivat kirjoittaa.

löytö . -perm -444 -perm / 222! -perm / 111 löytää. -perm -a + r -perm / a + w! -perm / a + x

Nämä kaksi komentoa etsivät jokaiselle (-perm -444 tai -perm -a + r) luettavia tiedostoja ainakin kirjoitusbittiä (-perm / 222 tai -perm / a + w) mutta eivät ole suoritettavissa kaikille (! -perm / 111 ja! -perm / a + x vastaavasti)

Tärkeää: Käytä man- komentoa ( % man ) nähdäksesi kuinka komentoa käytetään tietyssä tietokoneessa.