Nykyinen versio |
Oma tekstisi |
Rivi 1: |
Rivi 1: |
| {{DISPLAYTITLE:{{lcfirst:{{PAGENAME}}}}}}
| | '''find''' komennolla voi etsiä asioita koneelta ja tiedostoista. |
| '''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ö == | | == Esimerkkejä miten findia käytetään == |
|
| |
|
| Etsii .log-päätteiset (*.log) tiedostot nykyisestä hakemistosta (.) ja alihakemistoista.
| | Etsi *.log täältä ja alahakemistoista: |
| find -name '*.log' | | 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.
| | Etsi isoimmat filet: |
| find /var -type f -mmin -30 -print | | find /var -type f -printf "%s\t%p\n"|sort +0n |
|
| |
|
| Laskee montako .jpg-tiedostoa nykyisestä hakemistosta ja sen alihakemistoista löytyy huomioiden myös isolla kirjoitetut merkit.
| | Listaa kaikki tiedostot joita on muutettu viimeisen 30min aikana, myös alihakemistoista: |
| find -iname '*.jpg' | [[wc]] -l | | find . -type f -mmin -30 -print |
|
| |
|
| 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ä.
| | Laskee montako jpg fileä hakemiston alta löytyy: |
| find -empty -nogroup | | find -name '*.jpg' | wc -l |
|
| |
|
| Etsii ja poistaa kaikki käyttäjän greta omistamat noin 699 megatavun kokoiset tiedostot.
| | laittaa o+rwX oikeuden file.txt:lle kaikissa alihakemistoissa: |
| find -size 699M -user greta -delete | | find . -name file.txt -print0 | xargs -0 chmod o+rwX |
|
| |
|
| 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ä.
| | Lisää find komennon käyttötapoja löytyy [[Komentorivivinkkejä]] -sivulta. |
|
| |
|
| 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'''.
| | [[Luokka:Komentorivi]] |
| | |
| 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]] | |