FLOSS Manuals

 English |  Español |  Français |  Italiano |  Português |  Русский |  Shqip

Komentorivin perusteet

Useammat tiedostot

Useammat tiedostot

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!  

Ryhmittely

 

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.

Jokerimerkki "*"

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

"?"-jokerimerkki

"?" 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.

"[ ]" -jokerimerkki

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

Ryhmittely kun mikään tiedosto ei sovi 

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ä.

Jokerimerkin ottaminen pois päältä 

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ä.

Jokerimerkin kääntäminen toisin päin

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.