Nykyinen versio |
Oma tekstisi |
Rivi 1: |
Rivi 1: |
| {{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ä. |
| '''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ö == | | == Käyttö == |
| | | find -name '*.log' |
| Etsii .log-päätteiset (*.log) tiedostot nykyisestä hakemistosta (.) ja alihakemistoista. | | Etsii .log-päätteiset (*.log) tiedostot nykyisestä hakemistosta (.) ja alihakemistoista. |
| 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 -mmin -30 -print | | find /var -type f -mmin -30 -print |
| | | Listaa /var-[[linuxin hakemistorakenne|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 -iname '*.jpg' | [[wc]] -l |
| Laskee montako .jpg-tiedostoa nykyisestä hakemistosta ja sen alihakemistoista löytyy huomioiden myös isolla kirjoitetut merkit. | | Laskee montako .jpg-tiedostoa nykyisestä hakemistosta ja sen alihakemistoista löytyy huomioiden myös isolla kirjoitetut merkit. |
| find -iname '*.jpg' | [[wc]] -l | | find . -name file.txt -print0 | [[xargs]] -0 [[chmod]] o+rwX |
| | | Asettaa o+rwX-[[Tiedoston oikeudet|oikeudet]] <tt>file.txt</tt>-nimisille tiedostoille kaikissa alihakemistoissa. |
| 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 ~jani-petteri -type l -iname *å* -exec mv '{}' ~tobias/foo/stuff/ ';' |
| | 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 -empty -nogroup | | find -empty -nogroup |
| | | Etsii nykyisestä hakemistosta ja sen alihakemistoista kaikki tavalliset tiedostot ja hakemistot jotka ovat tyhjiä ja joiden omistajaksi määriteltyä [[GID|ryhmänumeroa]] ei vastaa mukään järjestelmän olemassaoleva ryhmä. |
| | find -size 699M -user greta -delete |
| Etsii ja poistaa kaikki käyttäjän greta omistamat noin 699 megatavun kokoiset tiedostot. | | Etsii ja poistaa kaikki käyttäjän greta omistamat noin 699 megatavun kokoiset tiedostot. |
| 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ä.
| |
|
| |
|
| 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'''.
| | Lisää find komennon käyttötapoja löytyy [[komentorivivinkkejä]]-sivulta. |
| | |
| 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== | | ==Katso myös== |