Tiedostojen etsiminen Linuxissa komentorivillä

find on komento tiedostojärjestelmän kohteiden rekursiiviseen suodattamiseen yksinkertaisen ehdollisen mekanismin perusteella. Käytä find:tä etsiessäsi tiedostoa tai hakemistoa tiedostojärjestelmästäsi. Käyttämällä -exec-lippua tiedostot voidaan löytää ja käsitellä välittömästi samassa komennossa. Seuraava esimerkki etsii *.err-tiedostoja hakemistosta /home/username/ ja kaikista alihakemistoista:

find /home/username/ -name "*.err"

Konsolissa pitäisi näkyä samankaltainen tuloste:

 /home/username/example.errThe matching file in the /home/username/ directory is "example.err"

Yleiset Linuxin hakukomennot ja syntaksi

Komento find on tavallisesti seuraavassa muodossa:

find options starting/path expression
  • Aattribuutilla options ohjataan prosessin find käyttäytymistä ja optimointitapaa.
  • Aattribuutti starting/path määrittelee ylimmän tason hakemiston, jossa find aloittaa suodatuksen.
  • Aattribuutti expression ohjaa testejä, jotka etsivät hakemistohierarkiasta tulosteen tuottamiseksi.

Tiedoston etsiminen Linuxissa tiedostonimen avulla

Tiedoston etsimiseen tiedostonimen avulla käytetään syntaksia find -name filename. Polun pois jättäminen etsii tiedostoa koko levyltä. Voit esimerkiksi etsiä example.err-nimisen tiedoston, joka sijaitsee hakemistossa /home/username, seuraavalla komennolla:

find -name example.err

Tulosteen pitäisi olla samankaltainen:

 ./username/example.err

Tiedoston etsiminen nykyisestä hakemistosta Etsi-komennolla

Katso esimerkkihakemistorakennetta ja tiedostoja. Niihin viitataan kaikkialla tämän oppaan esimerkeissä.

 ├── directory_1│ ├── subdirectory_1│ │ └── example.err│ └── example.err├── directory_2│ └── example.err├── directory_3│ └── example.err├── image01.png├── web_files│ ├── app.html│ ├── cb=gapi.loaded_0│ ├── edit.html│ ├── m=_b,_tp│ ├── rs=AA2YrTtgyE1yYXiu-GuLS6sbJdYr0u8VBQ│ ├── rs=AA2YrTvod91nzEJFOvvfJUrn6_vLwwY0bw│ ├── saved_resource.html│ ├── single.html│ └── unnamed.jpg├── web.html└── example.err

Jos olet hakemistossa directory_1 ja haluat etsiä tiedoston example.err hakemistosta tai sen alihakemistoista, voit antaa seuraavan komennon:

find . -name example.err

Tulosteesi muistuttaa seuraavaa:

 ./example.err./directory_1/example.err

Tuloste kuvastaa hakemistorakennetta directory_1:

 ├── directory_1│ ├── subdirectory_1│ │ └── example.err│ └── example.err

Kuvatiedostojen etsiminen Linuxissa komentorivillä

Viitaten edellisen kappaleen tiedostorakenteeseen, on olemassa kuva nimeltä image01.png, joka sijaitsee hakemistorakenteen juuressa (/)s.

Tiedoston image01.png löytämiseksi suorita seuraava find-komento, joka etsii kaikki /-hakemiston / sisälle tallennetut .png-tiedostot.

find -name *.png

Tulosteen pitäisi olla samankaltainen:

 ./image01.png

Vaihda kuvatiedostotyyppiä ja etsi juurihakemiston (/) sisältämät .jpg-tiedostot:

find -name *.jpg

Tuloste muistuttaa esimerkkiä. Katso tiedoston sijaintia edellisessä osassa olevasta esimerkkihakemistorakenteesta.

 ./web_files/unnamed.jpg

Tyhjän tiedoston etsiminen hakemistosta komentorivin avulla

Tyhjän tiedoston etsiminen hakemistosta komentorivin avulla tapahtuu antamalla seuraava komento:

find . -type f -empty

Jos tulostetta ei palauteta, nykyisessä hakemistossa ei ole tyhjää tiedostoa.

Options and Optimizations for Finding Files in Linux Using the Command Line

Default configuration for find ignoressymbolic links. Jos haluat, että find seuraa ja palauttaa symbolisia linkkejä, lisää komentoon -L-vaihtoehto alla esitetyllä tavalla:

find -O3 -L /var/www/ -name "*.html"

Tämä komento ottaa käyttöön suurimman optimointitason (-O3) ja antaa find:n seurata symbolisia linkkejä (-L). find etsii koko /var/www/:n alla olevasta hakemistopuusta tiedostoja, joiden pääte on .html.

find optimoi suodatusstrategiansa suorituskyvyn parantamiseksi. Kolme käyttäjän valittavissa olevaa optimointitasoa on määritetty -O1, -O2 ja -O3. Optimointi -O1 on oletusarvo, ja se pakottaa find suodattamaan tiedostonimen perusteella ennen kaikkien muiden testien suorittamista.

Tason -O2 optimointi priorisoi tiedostonimensuodatuksen, kuten -O1:ssä, ja suorittaa sen jälkeen kaiken tiedostotyyppisuodatuksen ennen muiden resursseja vaativampien ehtojen suorittamista. Tason -O3 optimointi mahdollistaa find:n tiukimman optimoinnin ja järjestää kaikki testit uudelleen niiden suhteellisten kustannusten ja onnistumisen todennäköisyyden perusteella.

Komento Kuvaus
-O1 Suodattaa ensin tiedostonimen perusteella (oletus).
-O2 Tiedoston nimi ensin, sitten tiedostotyyppi.
-O3 Mahdollistaa find järjestää haun automaattisesti uudelleen resurssien tehokkaan käytön ja todennäköisyyden perusteella. onnistumisesta
-maxdepth X Haku nykyisestä hakemistosta sekä kaikista alihakemistoista X tasoa syvemmältä.
-iname Haku huomioimatta tekstitapausta.
-not Palauttaa vain sellaiset hakutulokset, jotka eivät sovi testitapaukseen.
-type f Tiedostojen haku.
-type d Hakemistojen haku.

Tiedostojen etsiminen Linuxissa muutosajankohdan mukaan komentorivin avulla

Komennolla find voi suodattaa hakemistohierarkian sen perusteella, milloin tiedostoa on viimeksi muutettu. Esimerkiksi seuraava komento etsii kaikki tiedostot, joilla on .err-pääte ja joita on muutettu viimeisten 7 päivän aikana:

find / -name "*err" -mtime -7

Esimerkkikomento palauttaa seuraavan tulosteen:

 /home/username/directory_3/example.err/home/username/username/example.err/home/username/username/directory_2/example.err/home/username/username/directory_1/example.err/home/username/username/directory_1/subdirectory_1/example.err

Käytä Grep-ohjelmaa tiedostojen etsimiseen Linuxissa komentorivin avulla

Komento find pystyy suodattamaan hakemistohierarkian vain tiedoston nimen ja metatietojen perusteella. Jos haluat tehdä haun tiedoston sisällön perusteella, käytä esimerkiksiegrep-työkalua. Tarkastellaan seuraavaa esimerkkiä:

find . -type f -exec grep "test" '{}' \; -print

Tämä komento hakee jokaisen nykyisen hakemistohierarkian (.) objektin, joka on tiedosto (-type f), ja suorittaa sitten komennon grep "test" jokaiselle ehdot täyttävälle tiedostolle. Vastaavat tiedostot tulostetaan näytölle (-print). Suljetut aaltosulkeet ({}) ovat paikanvaraaja find-tuloksille. {} on suljettu yksinkertaisiin lainausmerkkeihin ('), jotta grep:lle ei annettaisi epämuodostunutta tiedostonimeä. Komento -exec lopetetaan puolipisteellä (;), joka on vältettävä (\;), jotta komentotulkki ei tulkitsisi sitä.

Esimerkissä käytetyssä tiedostossa (example.err) on sisällä tekstiä, jossa lukee ”test”. Kun suoritat esimerkkikomennon, näet samanlaisen tulosteen:

 test./directory_3/example.errtest./example.errtest./directory_2/example.errtest./directory_1/example.errtest./directory_1/subdirectory_1/example.err

Grep tunnisti kaikki nykyisen työhakemiston sisällä olevat tiedostot, jotka sisältävät merkkijonon ”test”.

Huomautus

Ennen kuin find-komennon -exec-optio toteutettiin, voit tuottaa yllä olevan esimerkin kaltaisen tulosteen käyttämällä xargs-komentoa:

find . -type f -print | xargs grep "test"

Tiedostojen käsitteleminen ja etsiminen Find-komennon avulla Linuxissa

Vaihtoehto -exec ajaa komentoja jokaista find-lauseketta vastaavaa kohdetta vastaan. Tarkastellaan seuraavaa esimerkkiä:

find . -name "example.err" -exec chmod o+r '{}' \;

Tämä suodattaa jokaisen objektin nykyisessä hierarkiassa (.) rc.conf-nimisten tiedostojen osalta ja suorittaa komennon chmod o+r muuttaakseen komennon find tulosten tiedostojen käyttöoikeuksia.

Esimerkkikomento ajaa ja suorittaa -exec-vaihtoehdon find prosessin find juurihakemistossa. Käyttämällä -execdir voit suorittaa määritetyn komennon hakemistossa, jossa ottelu sijaitsee. Tämä saattaa lieventää tietoturvaongelmia ja tuottaa parempaa suorituskykyä joissakin toiminnoissa.

Vaihtoehdot -exec tai -execdir suoritetaan ilman lisäkehotuksia. Jos haluat, että sinua kehotetaan ennen toiminnan aloittamista, korvaa -exec -ok:lla tai -execdir -okdir:lla.

How to Find and Delete Files Using the Linux Command Line

Caution

Käytä tätä vaihtoehtoa äärimmäisen varovaisesti.

Lisää vaihtoehto -delete täsmäävän lausekkeen loppuun, jos haluat poistaa kaikki täsmäävät tiedostot. Käytä tätä vaihtoehtoa, kun olet varma, että tulokset täsmäävät vain niihin tiedostoihin, jotka haluat poistaa.

Alla olevassa esimerkissä find etsii rekursiivisesti kaikki tiedostot hierarkiassa alkaen nykyisestä hakemistosta ja poistaa kaikki tiedostot, jotka päättyvät .err-päätteeseen:

find . -name "*.err" -delete

Vielä kysyttävää?

Liity yhteisöömme ja kirjoita kysymyksesi, jotta muut Linode- ja Linux-asiantuntijat voivat auttaa sinua.

Aiheeseen liittyvät kysymykset:

Vastaa

Sähköpostiosoitettasi ei julkaista.