Maksutavat Abuse

Tiedostojen haku sisällön perusteella Linuxissa: ack ja ripgrep

03.05.2023, 23:33

Tiedostohaku sisällön mukaan Linuxissa voi vähentää merkittävästi aikaa ja vaivaa, kun etsitään tiettyjä tietoja suurista ja monimutkaisista tiedostojärjestelmistä.

Miksi tiedostojen haku sisällön mukaan on tarpeen

Tämä haku voi olla erityisen hyödyllinen, kun haluat etsiä tiedostoja, jotka sisältävät tietyn merkkijonon tai avainsanan, tai kun haluat löytää kaikki tiedostot, jotka vastaavat tiettyä mallia tai kriteeriä.

Tiedostojen etsimistä sisällön perusteella voidaan käyttää erilaisiin tehtäviin, kuten etsimiseen:

  • tietty teksti suurista tekstitiedostoista
  • tiettyjä asetuksia tai komentoja sisältävät asetustiedostot ja komentosarjat.
  • tiedostoja, jotka sisältävät tiettyjä tietoja, kuten käyttäjänimiä tai puhelinnumeroita.
  • tiedostot sisältötyypin mukaan, kuten kaikkien JPEG-kuvia tai PDF-asiakirjoja sisältävien tiedostojen etsiminen.

Tiedostojen etsimisen sisällön mukaan yleisenä tarkoituksena on helpottaa tiedostojärjestelmän kanssa työskentelyä ja etsiä tiedostojärjestelmästä tarvitsemasi tiedot.

ack

Aloitetaan ack-apuohjelmasta. Se luotiin vuonna 2005 vaihtoehdoksi grep:lle, ja siitä tuli nopeasti suosittu kehittäjien keskuudessa.

Sillä on useita etuja grep:iin verrattuna, muun muassa seuraavat:

  • älykkäämmät tiedosto- ja poikkeushaut. Ack etsii oletusarvoisesti vain tiedostoista, joissa voi olla järkeä, esimerkiksi jättämällä .svn- tai .git-kansiot pois. Lisäksi voit lisätä omia sääntöjä ja poikkeuksia;
  • Ack etsii oletusarvoisesti piilotettuja tiedostoja ja hakemistoja;
  • Ack ei yritä etsiä kaikkialta, edes järjestelmäkansioista, kuten grep. Tämä tarkoittaa, että voit helposti löytää järjestelmässäsi piilossa olevat tiedostot.

Esimerkkejä ack:n käytöstä:

  • Etsi nykyisestä kansiosta ja sen alikansioista kaikki tiedostot, jotka sisältävät sanan "test": ack "test"
  • Sama asia, mutta jätetään pois tiedostot, joilla on .bak-pääte: ack "test" --ignore-file=match:/.bak$/
  • Etsitään nykyisestä kansiosta kaikki tiedostot, jotka sisältävät merkkijonon "hello", ja tulostetaan jokaisen tiedoston kaksi ensimmäistä riviä: ack "hello" --heading --max-count=2

ripgrep

Toinen mielenkiintoinen työkalu on ripgrep. Se on monin tavoin samanlainen kuin ack, mutta käyttää nopeampaa hakualgoritmia, mikä tekee siitä erityisen hyödyllisen suurissa projekteissa.

Tässä on muutamia esimerkkejä:

  1. Etsi nykyisestä kansiosta ja sen alikansioista kaikki tiedostot, jotka sisältävät sanan "test": rg "test".
  2. Sama, mutta pois lukien tiedostot, joissa on .bak-pääte: rg "test" --glob "!*.bak"
  3. Etsitään nykyisestä kansiosta kaikki tiedostot, jotka sisältävät merkkijonon "hello", ja tulostetaan jokaisen tiedoston kaksi ensimmäistä riviä: rg "hello" --heading --max-columns=2

Lopuksi on syytä mainita fzf. Se ei ole pelkkä merkkijonojen etsijä kuten ack ja ripgrep. Fzf:ää käytetään apuohjelmana tiedostojen, kansioiden ja listan kohteiden etsimiseen. Muuten se toimii samalla tavalla kuin ack/ripgrep, mutta sillä on lisäksi mahdollisuus suodattaa tuloksia. Tässä on muutamia esimerkkejä:

  • Etsi F-kirjaimella alkavia tiedostoja tietokoneesta: locate F | fzf -m
  • Poistu nykyisestä kansiosta ja siirry haluamaasi hakemistoon: cd **<TAB> | fzf
  • Valitse SVN-versio ja kopioi numero leikepöydälle: svn log | fzf --reverse --ansi | awk '{print $1}' | pbcopy

Toivottavasti nämä työkalut auttavat sinua löytämään tarvitsemasi tiedostot ja merkkijonot nopeasti ja tehokkaasti. Minkä tahansa valitsetkin, ne kaikki tarjoavat kehittyneitä hakuja, jotka voivat nopeuttaa työtäsi huomattavasti.