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 find
perustoiminnot. 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