logo

Etsi komento Linuxissa/Unixissa esimerkkien avulla

Find-komento auttaa meitä löytämään tietyn tiedoston hakemistosta. Sitä käytetään tiedostoluettelon etsimiseen eri ehdoilla, kuten luvalla, käyttäjän omistajuudella, muokkauksella, päivämäärällä/kellonajalla, kokolla ja muilla.

Unix-tyyppisissä ja muissa käyttöjärjestelmissä find-komento on komentorivityökalu, joka etsii tiedostoja muutaman käyttäjän määrittämän muodon perusteella ja joko tulostaa kaikki vastaavan objektin polunimet tai, jos muita toimia pyydetään, toteuttaa toiminnon kaikki vastaavat objektit.

Se aloittaa haun halutusta aloituspaikasta ja sen jälkeen kulkee rekursiivisesti hierarkkisen rakenteen (yleensä puun) hakemistojen (solmujen) läpi. Find-komento voi etsiä ja kulkea eri tiedostoosiojärjestelmistä, jotka kuuluvat yhteen tai useampaan tallennuslaitteeseen aloitushakemiston alla.

Hakumuoto sisältää mallin sovittamiseksi tiedostonimen kanssa tai aikavälin sovittamiseksi muokkausaikaan tai tiedoston käyttöaikaan. Find-komento tarjoaa oletusarvoisesti luettelon kaikista nykyisen työhakemiston tiedostoista. Käyttäjät voivat kuitenkin rajoittaa haun halutulle enimmäistasolle aloitushakemistossa.

Liittyvät paikannusohjelmat käyttävät hienokomennolla saatua indeksoitua tiedostotietokantaa tarjotakseen nopeamman tekniikan koko tiedostojärjestelmän etsimiseen nimen perusteella.

Etsi-apuohjelma tulee oletuksena useimpien Linux-distroja , joten meidän ei tarvitse asentaa lisäpakettia. Se on yksi tärkeimmistä ja käytetyimmistä komennoista Linux järjestelmä.

 find 

Nämä kaksi vaihtoehtoa määrittävät, kuinka haun tulisi ottaa huomioon symboliset linkit. Oletusluonne ei ole koskaan tavoitella symbolisia linkkejä. Lippu, ts. -L , johtaa etsinnän tavoittelemaan symbolisia linkkejä. Lippu, ts. -H , etsii vain symbolisia linkkejä jatkaessaan komentoriviargumentteja. Liput mainitaan POSIX-standardissa etsi-komennon osalta. Peruslaajennus on lippu, eli -P , poistaaksesi seuraavan symbolilinkin käytöstä.

Ainakin polun on ennakoitava lauseke. Find-komento voi tulkita sisäisesti jokerimerkkejä, ja komentot on lainattava huolellisesti, jotta komentotulkin globbing voidaan hallita.

Lausekkeen komponentit erotetaan komentorivin argumentin rajalla, joka yleensä ilmaistaan ​​välilyönninä komentotulkkisyntaksissa. Niitä tarkastellaan vasemmalta oikealle. Ne voivat sisältää loogisia komponentteja, kuten OR ja AND, sekä predikaatteja (toimintoja ja suodattimia). GNU find sisältää useita muita ominaisuuksia, joita POSIX ei maininnut.

Seuraavia symboleja käytetään määrittämään hakemisto:

(.) : Nykyinen hakemiston nimi

(/) : juurihakemistolle

Etsi-komennon lyhyt historia

Find-komento esiintyi versiossa 5 Unix osana Ohjelmoijan työpöytä projekti ja sen määritteli Dick Haight cpion kanssa, jotka on kehitetty käytettäviksi yhdessä.

Alun perin find-komennon GNU-toteutuksen määritti Eric Decker . Myöhemmin sen kehitti David MacKenzie, Tim Wood , ja Jay Plett . Myös hakukomento on siirretty IBM i -käyttöjärjestelmään.

scanner.next java

Predikaatit

Laajalti käytettyjä esimerkkejä ovat:

    -nimimalli:Se tarkistaa, onko tiedoston nimi sama kuin annettu shell-glob-kuvio vai ei.-tyypin tyyppi:Se tarkistaa, että tiedosto on annettu tyyppi.-Tulosta:Se antaa aina todellisen arvon. Se tulostaa nykyisen tiedostonimen ja rivinvaihdon stdoutiin.-print0:Se antaa aina todellisen arvon. Se tulostaa nykyisen tiedostonimen ja tyhjän merkin stdout-tiedostoon. POSIX ei tarvitse.-exec-ohjelma [argumentti ...];:Se antaa aina todellisen arvon. Se suorittaa ohjelman, jossa on kiinteät annetut argumentit ja nykyinen tiedostopolku.-exec-ohjelma [argumentti ...] { } +:Se antaa aina todellisen arvon. Se suorittaa ohjelman kiinteillä annetuilla argumenteilla ja mahdollisimman useilla poluilla. Melkein jokaisessa toteutuksessa muut {}-esiintymät tarkoittavat ylimääräisiä kopioita annetusta nimestä (näkökohta, jota POSIX ei tarvitse).-ok ohjelma [argumentti ...];:Se on sama kuin -exec, mutta palauttaa epätosi tai tosi, jos ohjelma antaa 0.

Etsi oletusarvot -printin toteuttamiselle, jos ehdot ovat tosi, jos lauseke ei käytä mitään seuraavista: -ok, -exec, -print tai -print0.

Operaattorit

Operaattorit parantavat hakukomentolausekkeita. Ne on mainittu laskevassa tärkeysjärjestyksessä:

    (expr):Tämä operaattori voi pakottaa etusijalle.! expr:Jos expr palauttaa epätosi, se palauttaa tosi.
  • expr1 expr2 (tai expr1 -a expr2 : AND. expr2 ei arvioida, jos lause1 on epätosi.
  • Laus1 -o Laus2 : TAI. Laus2:ta ei arvioida, jos lause1 on tosi.

Esimerkkejä etsintäkomennosta

Katsotaanpa seuraavia esimerkkejä find-komennosta:

alennuskuva

Etsi tiedostoja nimen mukaan

Voimme etsiä kaikista tiedostoista, jotka päättyvät .txt-tunnisteella. Voit tehdä tämän suorittamalla alla olevan komennon:

 find . -name '*.txt' 

Yllä oleva komento luettelee kaikki nykyisen työhakemiston tekstitiedostot. Harkitse alla olevaa tulosta:

Linux Etsi

Yllä olevasta lähdöstä kaikki tiedostot, joilla on .txt-tunniste, luetellaan Find-komennolla.

Tiedostojen etsiminen tyypin mukaan

'-type'-parametria käytetään määrittämään tiedostotyyppi.

Jotkut tiedostotyypeistä ovat seuraavat:

  • f: tavallinen tiedosto
  • d: hakemisto
  • l: symboliset linkit
  • c: merkkilaitteet
  • b: Estä laitteet

Harkitse alla olevaa komentoa:

 find . -type d -name '*.bak' 

Yllä oleva komento luettelee kaikki hakemistot, joiden tunniste on '.bak'. Harkitse alla olevaa tulosta:

Linux Etsi

Yllä olevasta lähdöstä komento 'find . -type d -nimi '*.bak' näyttää kaikki hakemistot, jotka päättyvät '.bak'.

Etsi uudempia tiedostoja

Parametri '-uudempi' auttaa etsimään tiedostoja, jotka ovat uudempia kuin mainittu tiedosto. Harkitse alla olevaa komentoa:

 find . -newer msg.txt 

Yllä oleva komento näyttää kaikki tiedostot, jotka ovat uudempia kuin 'msg.txt' nykyisestä työhakemistosta. Harkitse alla olevaa tulosta:

Linux Etsi

Yllä olevasta lähdöstä kaikki näytettävät tiedostot ovat uudempia kuin msg.txt-tiedosto.

Etsi ja poista tiedosto

'-delete' -vaihtoehtoa käytetään tietyn tiedoston poistamiseen. Meidän on oltava erittäin varovaisia ​​käyttäessämme tätä komentoa, koska kumoamisvaihtoehtoa ei ole, jos se suoritetaan kerran. Harkitse alla olevaa komentoa:

 find . -name Demo.txt -delete 

Yllä oleva komento poistaa tiedoston 'Demo.txt' nykyisestä työhakemistosta. Harkitse alla olevaa tulosta:

lajittelutaulukko javassa
Linux Etsi

Etsi hakemisto

'type -d' -vaihtoehtoa käytetään hakemiston etsimiseen. Harkitse alla olevaa komentoa:

 find . type -depth -name Newdirectory 

Yllä oleva komento löytää 'New Directory' -sijainnin. Harkitse alla olevaa tulosta:

Linux Etsi

Etsi tiedostoja muokkausajan mukaan

'-mtime'-vaihtoehtoa, jota seuraa päivien lukumäärä, käytetään tiedostojen etsimiseen muokkaamalla. Päivien lukumäärä voi olla positiivinen tai negatiivinen. Negatiivista arvoa käytetään vähemmän kuin -1:tä käytetään viimeisenä päivänä, ja vastaavasti +1 etsii tiedoston yli yhden päivän ajalta. Harkitse alla olevaa komentoa:

 find ./Newdirectory -mtime -1 

Yllä oleva komento löytää tiedostot, joita on muokattu viimeisen päivän aikana. Harkitse alla olevaa tulosta:

Linux Etsi

Etsi tiedostoja luvalla

'-perm'-vaihtoehtoa käytetään tiedostojen etsimiseen luvan perusteella. Suorita hakukomento '-perm'-optiolla ja välitä vaadittu arvo. Harkitse alla olevaa komentoa:

 find ./ -perm 777 

Yllä oleva komento luettelee määritetyn hakemiston tiedostot, jotka kaikki voivat lukea, kirjoittaa ja suorittaa.

Etsi ja korvaa tiedostoja

Tiedostojen etsimiseksi ja korvaamiseksi meidän on yhdistettävä find-komento sed-komentoon. Jos haluat käsitellä tiedostoja, käytä '-exec'-vaihtoehtoa find-komennon kanssa. Harkitse alla olevaa komentoa:

 find ./Newdirectory -type f -exec sed -i 's/find/replace/g' {} ; 

edellä olevasta komennosta määritetty esiintymä korvataan. Harkitse alla olevaa tulosta:

Linux Etsi

Etsi tekstiä useista tiedostoista

Voimme tehdä toisen yhdistelmän find-komennosta grep-komennon kanssa löytääksemme tekstin eri tiedostoista. Harkitse alla olevaa komentoa:

 find ./Newdirectory -type f -name '*.txt' -exec grep 'demo' {} ; 

Yllä oleva komento löytää tekstin 'demo' sisältävät rivit kaikista hakemiston 'Newdirectory' tekstitiedostoista. Harkitse alla olevaa tulosta:

Linux Etsi

Yllä olevasta lähdöstä voimme nähdä rivit, joissa teksti 'demo' on näytetty.

Hae jokaisesta hakemistosta

 $ find / -name file1 -type f -print 

Yllä oleva komento etsii kaikki hakemistot tavalliselle tiedostolle, jonka otsikko on tiedosto1, ja tulostaa sen näytölle. Yleensä ei ole hyvä idea etsiä tiedostoja tällä tavalla. Se voi viedä hyvän ajan. Joten on parasta mainita hakemisto. Muutamat käyttöjärjestelmät voivat liittää tiedostojärjestelmiä (dynaamisia), jotka eivät ole edullisia find-komennolle. Monimutkaisemmat tiedostonimet, jotka sisältävät kuoren ainutlaatuisia merkkejä, voidaan joutua sulkemaan lainausmerkeissä.