Totuttuasi komentoriviin joudut etsimään tapoja tehdä enemmän lyhyemmässä ajassa. Yksi helpoimmista tavoista saada tämä aikaan on muokata monia tiedostoja samaan aikaan, joten sen sijaan että poistat tiedostot yksitellen:
$ rm vanha $ rm turha $ rm virhe $ rm tarpeeton
Poistat vain kaikki näistä tiedostoista yhdellä komennolla. Monet komennot, kuten "rm", antavat valita kaikki poistettavat tiedostot kerralla:
$ rm vanha turha virhe tarpeeton
Edelleenkin, täytyy olla parempi tapa!
Tiedostojen ryhmittely on komentorivin tapa käsitellä monia tiedostoja käyttäen mahdollisimman vähän kirjoitusmerkkejä. Pääte käsittelee joitain merkkejä koodeina, joita voit käyttää määrittelemään asioita ryhmiin, joihin tahdot komentojen vaikuttavan. Näitä merkkejä kutsutaan yleensä "jokerimerkeiksi", koska ne ovat kuin pelikortti, jonka pelaajat ovat määritelleet merkitsemään mitä tahansa.
Ajattele hakemistoa, jossa on tiedostoja:
$ ls vanha turha virhe tarpeeton
jonka tahdot poistaa. Pitkäveteisen homman voi muuttaa yksinkertaiseksi käyttämällä "*" eli asteriski -jokerimerkkiä.
$ rm *
Kun sitä käytetään yksinään, asteriski-jokerimerkki viittaa kaikkiin tiedostoihin hakemistossa. Voimme sanoa, että pääte laajentaa jokerimerkkiä. Pääte tietää mitä hakemistossa on, se korvaa tiedostonimet asteriskilla ja toteuttaa käytännössä seuraavan komennon:
$ rm vanha turha virhe tarpeeton
Voit lisätä merkkiin "*" muita merkkejä tehdäksesi siitä valikoivan.
$ rm t* $ ls vanha virhe
Mitä tässä tapahtui? Pääte katsoi ensin merkkiä "t" ja laajensi sitten asteriskin käsittämään kaikki tiedostot, jotka alkoivat merkillä "t". Jos olisit yrittänyt sen sijaan "v*", olisi pääte poistanut kaikki tiedostot, jotka alkavat merkillä "v". Korvataanpa alkuperäiset tiedostot ja katsotaan mitä tapahtuu:
$ rm v* $ ls turha tarpeeton
Asteriski -jokerimerkki voidaan sijoittaa mihin tahansa sanan sisällä. Siirrytäänpä "ls"-komentoon, koska on helpompi nähdä, mitä jokerimerkit tekevät:
$ ls tu*rha turha
Siirtymällä komennosta "rm" komentoon "ls" näemme tärkeän jokerimerkin ominaisuuden: voit käyttää niitä minkä tahansa komennon kanssa, koska pääte käsittelee ne ennen kuin edes kutsuu komennon. Itse asiassa et voi antaa komentoa ottamatta huomioon jokerimerkkien käytöstä, koska ne ovat päätteen ominaisuus. (Onneksi tiedostonimissä ei koskaan ole asteriskia.)
Useampia asteriskeja voidaan myös käyttää yhdessä. Tällä tavalla voit esimerkiksi löytää tiedostonimiä, joissa sarjan keskiosa on sama, mutta ne alkavat ja päättyvät eri tavalla. Kokeillaanpa alkuperäisten neljän tiedoston kanssa:
$ ls *i* virhe
Asteriskia käytetään usein poistamaan tiedostot, jotka ovat kaikki yhtä tyyppiä. Esimerkiksi, jos olet työskennellyt kuvien kanssa ja tahdot poistaa ".jpg" -loppuisia tiedostoja kun olet lopettanut, voit poistaa ne nykyisessä hakemistossasi seuraavalla tavalla:
$ rm *.jpg
Oletetaan, että sinulla on joitain ".jpg" -loppuisia tiedostoja ja joitain ".jpeg" -loppuisia tiedostoja. Asteriski tekee silti siivoamisesta helppoa:
$ ls *.jp*g
Tai oletetaan, että JPEG-tiedostot ovat jakautuneena useampaan alihakemistoon. Sinulla on hakemistot nimeltä "kuvat1", "kuvat2", "kuvat3" ja niin edelleen, jokaisessa on JPEG-tiedostoja, jotka tahdot poistaa. Jokerimerkki auttaa sinua listaamaan noiden alihakemistojen sisällön:
$ ls kuvat* kuvat1: keskusasema.jpg uusi_kirkko.jpg kuvat2: ica.jpeg teatteri.jpeg kuvat3: bayeux_katedraali.jpeg rouen_katedraali.jpeg matka.odt
Ja voit valita hakemiston poistettavien tiedostonimien kanssa:
$ rm kuvat*/*.jp*g $ ls kuvat* kuvat1: kuvat2: kuvat3: matka.odt
Ainoastaan tiedosto "matka.odt" jää jäljelle (koska siinä ei ole merkkijonoa ".jp*g") kaikkien tekemiesi matkojen listana.
On kuitekin yksi rajoitus asteriski-jokerimerkin käyttöön. Oletusasetuksena se ei ota huomioon kätkettyjä tiedostoja (niitä tiedostonimiä, jotka alkavat pisteellä, sinun täytyy käyttää komentoa "ls -a" nähdäksesi nämä).
$ ls -a . .. .piilossa turha vanha virhe tarpeeton $ rm * $ ls -a . .. .piilossa
Jos tahdot tuhota nämä kätketyt tiedostot jokerimerkillä, on tarpeen laittaa piste jokerimerkin eteen. Huomaa, että normaaleja tiedostoja (eli niitä, jotka eivät ole kätkettyjä, eli eivät ala pisteellä) ei poisteta, kun teet näin:
$ls -a . .. .piilossa $rm .* $ls -a . ..
Lopuksi, on tärkeää huomata, että asteriski voi myös sopia tyhjään. Seuraavassa listassa homma listataan niiden tiedostojen lisäksi, joilla on jotain asteriskiin sopivaa:
$ ls homma* homma hommaA hommaB hommaXY
"?" tai kysymysmerkki -jokerimerkki on hyvin samantapainen kuin asteriski-jokerimerkki. Varsinainen ero on, että kysymysmerkki-jokerimerkki korvaa vain yhden kirjoitusmerkin.
$ ls homma* homma hommaA hommaB hommaXY $ ls homma? hommaA hommaB $ ls homma?? hommaXY
Kuten olemme jo nähneet, asteriski sopii kaikkiin tiedostoihin, jotka alkavat kirjaimilla "homma". Yksittäinen kysymysmerkki sopii tiedostoihin, joissa on yksi merkki "homma"-kirjainten jälkeen. Kaksi kysymysmerkkiä vaatii täsmälleen kahta kirjoitusmerkkiä tässä paikassa.
Hakasulku-jokerimerkit voivat olla vielä tarkempia, sillä ne osoittavat tietyn merkkivälin. Seuraava "ls" -komento sisältää "-1" -valitsimen, mikä merkitsee "listaa yksi merkki joka rivillä." Näin on helpompaa nähdä, kuinka tiedostot tässä esimerkissä eroavat toisistaan.
$ ls -1 tiedosto_1 tiedosto_2 tiedosto_3 tiedosto_a tiedosto_b tiedosto_c
Käyttämällä hakasulkuja voit poistaa tiettyjä tiedostoja kirjoittamatta jokaista nimeä kokonaan.
$ rm tiedosto_[1,3,a,c] $ ls -1 tiedosto_2 tiedosto_b
Voit myös laittaa hakasulkuihin joukon yksittäisiä merkkejä ilman pilkkuja. Lopputulos olisi silti sama:
$ rm tiedosto_[13ac]
Hakasulkujen sisällä merkkien järjestyksellä ei ole merkitystä.
Yhdistämällä hakasulut tavuviivan kanssa voit tehdä komennon tietyllä välillä olevalle joukolle tiedostoja. Aloitetaanpa hakemistosta, jossa on monta numeroihin päättyvää tiedostoa:
$ ls -1 tiedosto_1 tiedosto_2 tiedosto_3 ... tiedosto_78
Aluksi voi olla houkuttelevaa käyttää asteriski-jokerimerkkiä tässä. Mitä jos meidän täytyy kuitenkin poistaa vain tiedostot 11-34? Voisimme käyttää pilkulla eroteltua muotoa hakasulku-jokerimerkistä, mutta joutuisimme silti kirjoittamaan 23 numeroa, sekä pilkut. Onneksi on paljon helpompikin tapa.
$rm tiedosto_[11-34]
Nyt ainoat jäljelle jääneet tiedostot ovat 1-10 ja 35-78. Käyttämällä väliviivaa hakasuluissa olevien numerojoukkojen välissä, saat päätteen laajentamaan kuviota luomalla nimen, jossa on jokainen numero väliviivan vasemmalla olevasta alkuarvosta aina oikealla olevaan loppuarvoon asti.
Numerovälien sijasta voidaan käyttää myös kirjainvälejä.
$ls -1 tiedosto_a tiedosto_b tiedosto_c tiedosto_d $ rm tiedosto_[a-c] $ ls -1 tiedosto_d
Sekä pilkut että kirjain- ja numerovälit voidaan yhdistää samoihin hakasulkuihin.
$ls file_a file_b file_c file_1 file_2 $rm file_[a-c,1,2] $ls
Oletetaan, että käytät jokerimerkkiä ja pääte ei löydä sopivaa tiedostonimeä.
$ ls -1 tiedosto_a tiedosto_b tiedosto_c tiedosto_d $rm tiedosto? rm: cannot remove `tiedosto?': No such file or directory
Kun ei ole kuvioon sopivaa tiedostoa, pääte lähettää jokerimerkin ohjelmalle laajentamattomana. Tämän vuoksi saat virheviestin "rm"-ohjelmalta, et päätteeltä.
Okei, tiedämme että päätteelle pitää lähettää jokerimerkki optiona ohjelmalle, kun se ei löydä tiedostoa, mutta mitä teemme, kun tahdomme lähettää ohjelmalle merkin, joka on myös jokerimerkki? Tässä on yleinen esimerkki: etsimme tiedostosta jokaista asteriskin ilmentymää.
$ ls 2tiedosto *tiedosto *?****[a-b]
Nyt tahdomme tiedoston "*tiedosto", mutta saamme:
*file 2file
Miksi? Koska asteriski on jokerimerkki, pääte laajensi sen ennen kuin lähetti sen "ls"-komennolle. Joten laajennuksen jälkeen komento näyttää tälle:
$ ls *tiedosto 2tiedosto
Jos tahdomme "ls"-komennon löytävän asteriskin, täytyy tehdä jotain muuta.
"\" eli kenoviiva kertoo päätteelle, että seuraavaa merkkiä täytyy käsitellä normaalina merkkinä eikä jokerimerkkinä.
$ls \*tiedosto *tiedosto
Koska asteriski on seuraava merkki kenoviivan jälkeen, pääte lähettää asteriskin ls-komennolle muuttamattomana. Toisin sanoen: kenoviiva päästää asteriskin pakoon. Kenoviivamerkki toimii hyvin, kun meillä on vain yksi jokerimerkki, jonka tahdomme lähettää ohjelmalle, mutta jos tahdomme laittaa kokonaisen merkkijonon, kuten "*?****[a-b]", jossa on paljon merkkejä, jotka tulkittaisiin normaalisti jokerimerkeiksi? Jos käytämme kenoviivoja niiden päästämiseksi pakoon, joudumme merkitsemään jokaisen merkin erikseen. Lyhyestä merkkijonosta tulisi: "\*\?\*\*\*\*\[a-b\]". Sen sijaan, että kirjoittaisimme kaksinkertaisen määrän merkkejä, käytämme paria heittomerkkiä.
$ls '*?****[a-b]' *?****[a-b]
Pääte jättää muuttamatta jokaisen merkkijono, joka on suljettu heittomerkkeihin, jopa sen ollessa täynnä jokerimerkkejä.
Joskus tahdot kaikki tiedostot hakemistossa, paitsi ne, jotka sopivat kuvioon. Esimerkiksi sinulla on hakemisto, jossa on muutamia satoja tiedostoja ja noin viisikymmentä ei noudata mitään nimeämiskäytäntöä, mutta sataviisikymmentä on nimetty jonkin käytännön mukaan. Voisit kääntää jokerimerkkien merkityksen toisin päin, jolloin saisit juuri sen, mitä tahdot. Tässä kohdistinmerkki "^" ja hakasulut "[]" ovat käytännöllisiä.
$ rm [^tiedosto_]*
Kohdistinmerkki kääntää kuvion ympäri. Se käskee päätteen käsitellä kaikkia tiedostonimiä, jotka eivät sovi kuvioon. Tässä tempussa on kuitenkin yksi ongelma. Ainoastaan asteriski-jokerimerkki voidaan esittää hakasulkujen ulkopuolella.
$ ls -1 tiedosto_1 tiedosto_2 ... tiedosto_100 satunnainen_tiedosto toinen_satunnainen_tiedosto tiedosto_xyz $ rm [^tiedosto_]* $ ls -1 tiedosto_1 tiedosto_2 ... tiedosto_100 tiedosto_xyz
Tässä tapauksessa tiedosto "tiedosto_xyz" sopii ryhmitykseen "tiedosto_", sitä ei laajenneta, joten "rm" ei tee sille mitään.
There has been error in communication with Booktype server. Not sure right now where is the problem.
You should refresh this page.