Etsi tiedostoja ja hakemistoja Linuxissa Etsi-komennolla | Opensource.com

riippumatta siitä, kuinka järjestäytynyt päätän olla, näyttää siltä, että aina on aikoja, jolloin en vain pysty paikantamaan tiedostoa. Joskus se johtuu siitä, etten muista tiedoston nimeä. Muulloin nimi on tuttu, mutta en muista, mihin päätin sen säästää. On jopa aikoja, jolloin tarvitsen tiedoston, jota en luonut alun perinkään. Oli ongelma mikä tahansa, tiedän kuitenkin, että POSIX-järjestelmässä minulla on aina find – komento.

Installing find

find – komento on määritelty POSIX-spesifikaatiossa, joka luo avoimen standardin, jolla POSIX-järjestelmiä (mukaan lukien Linux, BSD ja macOS) mitataan. Yksinkertaisesti sanottuna, sinulla on jo find asennettuna niin kauan kuin käytät Linuxia, BSD: tä tai macOS: ää.

kaikki find käskyt eivät kuitenkaan ole täysin samanlaisia. Esimerkiksi GNU find – komennossa on ominaisuuksia, joita BSD: llä tai Busyboxilla tai Solariksella find ei välttämättä ole tai ei ole, mutta toteuttaa toisin. Tässä artikkelissa käytetään GNU find FINDUTILS-paketista, koska se on helposti saatavilla ja melko suosittu. Useimmat tässä artikkelissa osoitetut komennot toimivat muiden find toteutusten kanssa, mutta jos yrität komentoa muulla alustalla kuin Linuxissa ja saat odottamattomia tuloksia, kokeile GNU-version lataamista ja asentamista.

Etsi tiedosto nimellä

voit paikantaa tiedoston sen nimen mukaan antamalla koko tiedostonimen tai sen osia käyttäen säännöllisiä lausekkeita. Komento find vaatii polun hakemistoon, josta haluat etsiä, valitsimet, joilla voit määrittää, mitä attribuuttia haet (esimerkiksi –name, jos tiedostonimi on kirjainherkkä), ja sitten hakumerkkijonon. Oletusarvoisesti hakumerkkijonoa käsitellään kirjaimellisesti: komento find etsii tiedostonimen, joka on täsmälleen sama merkkijono, jonka syötät lainausmerkkien välillä, ellet käytä säännöllistä lausekkeen syntaksia.

oleta, että Asiakirjahakemisto sisältää neljä tiedostoa: Foo, foo, foobar.txt, ja foo.xml. Tässä on kirjaimellinen haku tiedoston nimi”foo”:

$ find ~ -name "foo"
/home/tux/Documents/examples/foo

hakua voi laajentaa tekemällä siitä asiaton -iname – valinnalla:

$ find ~ -iname "foo"
/home/tux/Documents/examples/foo
/home/tux/Documents/examples/Foo

yleismerkit

voit käyttää perustason yleismerkkejä hakusi laajentamiseen. Esimerkiksi asteriski (*) tarkoittaa mitä tahansa merkkiä:

$ find ~ -iname "foo*"
/home/tux/Documents/examples/foo
/home/tux/Documents/examples/Foo
/home/tux/Documents/examples/foo.xml
/home/tux/Documents/examples/foobar.txt

kysymysmerkki (?) edustaa yhtä merkkiä:

$ find ~ -iname "foo*.???"
/home/tux/Documents/examples/foo.xml
/home/tux/Documents/examples/foobar.txt

tämä ei ole säännöllisen lausekkeen syntaksi, joten piste (.) edustaa tässä esimerkissä kirjaimellista pistettä.

Säännölliset lausekkeet

voit käyttää myös säännöllisiä lausekkeita. Kuten -iname ja -name, on olemassa sekä kirjainherkkä että kirjainherkkä vaihtoehto. Toisin kuin -name ja -iname – valinnoissa, -regex ja -iregex hakua sovelletaan kuitenkin koko polkuun, ei vain tiedostonimeen. Se tarkoittaa, että jos etsii foo, ei saa tuloksia, koska foo ei vastaa /home/tux/Documents/foo. Sen sijaan sinun täytyy joko etsiä koko polku tai käyttää jokerimerkkisarjaa merkkijonosi alussa.:

$ find ~ -iregex ".*foo"
/home/tux/Documents/examples/foo
/home/tux/Documents/examples/Foo

Etsi tiedosto, jota on muutettu viimeisen viikon aikana

löytääksesi tiedoston, jota olet viimeksi muuttanut viime viikolla, käytä -mtime – valintaa sekä (negatiivista) päivien lukumäärää aiemmin:

$ find ~ -mtime -7
/home/tux/Documents/examples/foo
/home/tux/Documents/examples/Foo
/home/tux/Documents/examples/foo.xml
/home/tux/Documents/examples/foobar.txt

Etsi tiedosto, jota on muokattu päivien sisällä

voit yhdistää -mtime vaihtoehtoja tiedoston löytämiseksi päivien sisällä. Ensimmäisen -mtime argumentin osalta ilmoitetaan viimeisin lukumäärä päiviä, joina olet voinut muuttaa tiedostoa, ja toisen argumentin osalta suurin määrä päiviä. Esimerkiksi, tämä haku etsii tiedostoja muutos kertaa enemmän kuin yksi päivä aiemmin, mutta enintään seitsemän:

$ find ~ -mtime +1 -mtime -7

Rajoita haku tiedostotyypin

mukaan on tavallista optimoida find tulokset määrittämällä etsimäsi tiedostotyyppi. Sinun ei pitäisi käyttää tätä vaihtoehtoa, jos et ole varma, mitä etsit, mutta jos tiedät etsit tiedostoa eikä hakemistoa, tai hakemistoa, mutta ei tiedostoa, niin tämä voi olla hyvä suodatin käyttää. Vaihtoehto on -type, ja sen argumentit ovat kirjainkoodia, joka edustaa muutamaa erilaista tietoa. Yleisimpiä ovat:

  • d – kansio
  • f – tiedosto
  • l – symbolinen linkki
  • s – socket
  • p – nimetty putki (käytetään FIFO)
  • b – block special (yleensä kiintolevyn nimitys)

Tässä muutamia esimerkkejä:

$ find ~ -type d -name "Doc*"
/home/tux/Documents
$ find ~ -type f -name "Doc*"
/home/tux/Downloads/10th-Doctor.gif
$ find /dev -type b -name "sda*"
/dev/sda
/dev/sda1

Adjust scope

find komento on oletusarvoisesti rekursiivinen, eli se etsii tuloksia hakemistojen sisältämistä hakemistoista (ja niin edelleen). Tämä voi olla ylivoimaista suuressa tiedostojärjestelmässä, mutta voit käyttää -maxdepth – asetusta ohjataksesi kuinka syvälle kansiorakenteeseesi haluat find laskeutuvan:

$ find /usr -iname "*xml" | wc -l
15588
$ find /usr -maxdepth 2 -iname "*xml" | wc -l
15

voit vuorotellen asettaa rekursion vähimmäissyvyyden kanssa -mindepth:

$ find /usr -mindepth 8 -iname "*xml" | wc -l
9255

Lataa lunttilappu

tämä artikkeli kattaa vain findperustoiminnot. Se on loistava työkalu järjestelmän läpi etsimiseen, mutta se on myös todella hyödyllinen etupää tehokkaalle rinnakkaiselle komennolle. On monia syitä oppia find, joten lataa ilmainen find lunttilappu, jonka avulla voit oppia lisää komennosta.

Leave a Reply