Ero sivun ”Find” versioiden välillä
Siirry navigaatioon
Siirry hakuun
ei muokkausyhteenvetoa
Ei muokkausyhteenvetoa |
Ei muokkausyhteenvetoa |
||
(15 välissä olevaa versiota 6 käyttäjän tekeminä ei näytetä) | |||
Rivi 1: | Rivi 1: | ||
'''find''' komennolla voi etsiä | {{DISPLAYTITLE:{{lcfirst:{{PAGENAME}}}}}} | ||
'''find'''-[[komentorivi]]komennolla voi etsiä tiedostoja tiettyihin ehtoihin, kuten tiedostonnimeen tai omistajaan perustuen. Find mahdollistaa myös erilaisten toimintojen suorittamisen hakutulokseen pohjautuen. Valmiiseen tietokantaan pohjautuvia hakuja voi tehdä [[locate]]-ohjelmalla ja tiedostojen sisältöä koskevia hakuja [[grep]]illä. | |||
== | == Käyttö == | ||
Etsii .log-päätteiset (*.log) tiedostot nykyisestä hakemistosta (.) ja alihakemistoista. | |||
find | find -name '*.log' | ||
Listaa [[linuxin hakemistorakenne|/var-hakemistosta]] ja sen alihakemistoista kaikki tavalliset tiedostot (ei siis hakemistoja, laitetiedostoja, [[symbolinen linkki|symbolisia linkkejä]], [[nimetty putki|nimettyjä putkia]] ym.) joita on muutettu viimeisen 30 minuutin aikana. | |||
find /var -type f - | find /var -type f -mmin -30 -print | ||
Laskee montako .jpg-tiedostoa nykyisestä hakemistosta ja sen alihakemistoista löytyy huomioiden myös isolla kirjoitetut merkit. | |||
find . - | find -iname '*.jpg' | [[wc]] -l | ||
Etsii nykyisestä hakemistosta ja sen alihakemistoista kaikki tavalliset tiedostot ja hakemistot jotka ovat tyhjiä ja joiden omistajaksi määriteltyä [[GID|ryhmänumeroa]] ei vastaa mikään järjestelmän olemassaoleva ryhmä. | |||
find - | find -empty -nogroup | ||
Etsii ja poistaa kaikki käyttäjän greta omistamat noin 699 megatavun kokoiset tiedostot. | |||
find | find -size 699M -user greta -delete | ||
Lisää find-komennon käyttötapoja löytyy [[komentorivivinkkejä]]-sivulta. | |||
=== Findin yhdistäminen muihin komentoihin === | |||
Findin hyödyt tulevat parhaiten ilmi, kun ei vain tyydytä tiedostojen etsimiseen - työpöytäympäristöissä on yleensä oma helppokäyttöisempi ja esteettisempi työkalu tätä varten - vaan kun löydetyille tiedostoille pitää suorittaa mahdollisesti monimutkaisiakin operaatioita automaattisesti. Tämä on etenkin skripteissä käytännöllistä. | |||
[[Luokka: | Jos tiedostopolkujen prosessointi riittää, voi findin tulostetta putkittaa ja uudelleen ohjata aivan tavalliseen tapaan. Jos tämä ei kuitenkaan riitä, voi käyttää [[xargs]]-komentoa tai lipukkeita '''-exec''' ja '''-execdir'''. | ||
Otetaan ensimmäiseksi esimerkiksi tiedostojen listaaminen '''[[ls]]'''-komennon tapaisesti. Tähän löytyy findista oma lipukkeensa '''-ls''', joka tuottaa suunnilleen komentoa '''ls -dils''' vastaavan tulosteen. Tällä on kuitenkin puutteensa: jotkin kentät voivat olla ylimääräisiä, ääkköset tiedostonimissä voivat tulostua omituisesti eikä tiedostojen järjestys ole välttämättä mieluinen. Nämä ongelmat voidaan sivuuttaa findin '-exec'-lipukkeella, jolla voimme käytttää hakutuloksena saatuja tiedostoja 'ls'-komennon argumentteina; näin siis saamme lisää joustavuutta, sillä nyt voimme käyttää '''ls'''-komennon valitsimia. '-exec'-lipukkeen syntaksi on suurinpiirtein seuraava: | |||
find ./ -exec komento valinnat '{}' \; | |||
Nyt voimme esimerkiksi listata kaikki tiedostot väritettyinä ja tyypeittäin luokiteltuina, ilman ryhmä- ja omistajakenttiä ja näyttää tiedoston viimeisimmän muokkaamisen ajankohdan ja lukea tämän kaiken miellyttävästi [[less]]-komennolla: | |||
find -exec ls -dGghl --file-type --color \ | |||
--time-style=long-iso --time=ctime -- {} \; | less -RM | |||
Komento siis etsii rekursiivisesti kaikki tiedostot ja alikansioiden tiedostot ja suorittaa jokaiselle löydetylle tiedostolle erikseen komennon ''komento valinnat tiedosto''. Find sijoittaa tiedoston hakemistopolun kaarisulkujen paikalle. | |||
Edellä kuvattiin '''-delete'''-lipukkeen käyttö tiedostojen poistamisessa. Jälleen voimme kuitenkin saavuttaa joustavuutta '-exec'-lipukkeen käytöllä: ehkä tahdommekin nähdä, mitkä tiedostot tulimmekaan poistaneeksi. Jos suoritamme seuraavan komennon | |||
find ./kuvia/ -iname '*.jpg' -exec rm --verbose -- '{}' \; | |||
alla luetellussa hakemistorakenteessa | |||
└── kuvia | |||
├── d13jlk.gif | |||
├── häät.jpg | |||
├── KUKKA.JPG | |||
└── omena.jpg | |||
vastaa tämä olennaisesti seuraavan kolmen komennon peräkkäistä suorittamista | |||
rm --verbose -- ./kuvia/häät.jpg | |||
rm --verbose -- ./kuvia/KUKKA.JPG | |||
rm --verbose -- ./kuvia/omena.jpg | |||
Kuten näkyy, on tiedosto sijoitettu kaarisulkujen paikalle. Tämä ratkaisu ei kuitenkaan ole tehokkain mahdollinen, sillä nyt '''rm'''-komentoa kutsutaan kolme kertaa peräkkäin, mikä tuhlaa sekä aikaa, että muistia. Miten voisimme suorittaa tehokkaampaa komentoa | |||
rm --verbose -- ./kuvia/häät.jpg ./kuvia/KUKKA.JPG ./kuvia/omena.jpg | |||
vastaavan operaation findia käyttäen? Tämä hoituu melkein samoin kuin yllä | |||
find ./kuvia/ -iname '*.jpg' -exec rm --verbose -- '{}' + | |||
Kaikki löydetyt tiedostot siis lisätään peräkkäin argumenteiksi kaarisulkeiden osoittamalle paikalle. Jos argumentteja on hyvin paljon, joudutaan ne ehkä jakamaan muutamiin osiin. Olennaisesti kuitenkin komentoa kutsutaan huomattavasti harvemmin. | |||
Yleinen syntaksi siis on nyt | |||
find ./ -exec komento valinnat '{}' + | |||
Vaihtoehto '-exec'-lipukkeelle on '''-execdir'''. Se suorittaa komennon käyttäen työhakemistona hakutuloksen kansiota, mikä tuo turvallisuushyötyjä. | |||
'''-ok'''-lipuke on kuin '-exec', mutta ennen komennon suorittamista käyttäjältä kysytään varmistus. '''-okdir''' on '-execdir'-lipukkeen vastine. | |||
==== Esimerkkejä ==== | |||
Seuraava laskee työhakemiston ja sen kaikkien alihakemistojen avi-tiedostojen koot kilotavuissa ja tulostaa niiden summan. | |||
find ./ -type f -iname '*.avi' -exec du {} + | awk '{s+=$1} END {print s}' | |||
Asettaa o+rwX-[[Tiedoston oikeudet|oikeudet]] <tt>file.txt</tt>-nimisille tiedostoille kaikissa alihakemistoissa. | |||
find . -name file.txt -execdir [[chmod]] 'o+rwX' {} + | |||
Siirtää kaikki käyttäjän jani-petteri kotihakemistossa olevat [[symbolinen linkki|symboliset linkit]], joiden nimi sisältää ison tai pienen å:n, käyttäjän tobias kotihakemiston alla sijaitsevaan foo/stuff-hakemistoon. | |||
find ~jani-petteri -type l -iname '*å*' -exec mv --target-directory=~tobias/foo/stuff/ -- {} + | |||
==Katso myös== | |||
*[[locate]] | |||
*[[grep]] | |||
*[[xargs]] | |||
[[Luokka:Komentorivin perustyökalut]] | |||
[[Luokka:Tiedostonhallinta]] |