Kirjoittaja Aihe: Rar-pakettien haku, purku ja poisto terminaalissa tai skriptinä  (Luettu 1556 kertaa)

Cocktus

  • Käyttäjä
  • Viestejä: 73
    • Profiili
Eli tilanne on seuraavanlainen:

Kansioon ja sen alakansioihin tulee säännöllisen epäsäännöllisesti rar-paketteja, jotka pitäisi etsiä, purkaa ja poistaa onnistuneen purun jälkeen. Tiedostot ovat usein pakattu inkrementaalisesti kasvaviin "osapaketteihin" tyyliin *.rar, *.r01, *.r02 jne.

Ohjaan konetta ssh:n avulla terminaalissa, mutta sen verran käsi olen vielä tuon terminaalin kanssa etten keksi mitään sopivan simppeliä komentorypästä, jolla saisi hommat siististi ja nopeasti tehtyä.

Yksi mielenkiintoinen mahdollisuus olisi toteuttaa systeemi skriptinä, joka ajettaisiin käynnistyksen yhteydessä. Onko teillä heittää jotain vinkkiä, mistä pääsisi alkuun?

retu

  • Käyttäjä
  • Viestejä: 949
    • Profiili
Tarvitset purkuun ohjelmia find, xargs ja unrar. Kannattaa aluksi tutkailla niiden man-sivuja samalla kun miettii mitä kaikkea pitäisi saada aikaan.

Voit etsiä rar-tiedostoja kansiosta "saapuva" vaikka seuraavasti:
Koodia: [Valitse]
find saapuva/ -type f -iname '*.rar'Haussa voi käyttää monenlaisia kriteerejä, esim. tiedoston kokoa, päiväystä tai miten syvältä hakemistopuuta kaivellaan. Tuossa haetaan vain tiedostoja ja vain nimen perusteella eikä välitetä onko nimi isolla vai pienellä.

Myös unrar tuntee monia vipuja. Hyödyllinen yhdistelmä voisi olla:
Koodia: [Valitse]
unrar x -o- paketti.rarPurkaa paketin "paketti.rar" (myös siihen kuuluvat "paketti.r01", jne.). Paketissa olevat hakemistot luodaan ja olemassa olevia tiedostoja ei korvata. Jos haluat että korvataan, vaihda -o+.

Nuo pitää vielä yhdistää xargs ohjelmaa käyttäen:
Koodia: [Valitse]
find saapuva/ -type f -iname '*.rar' -print0 |xargs -0 unrar x -o-Tuossa siis xargs ajaa parametrina annetun unrar-komennon antaen sen parametreiksi omasta syötteestään luetut find-ohjelman etsimät tiedostonimet. :P Vipuja -print0 ja -0 kannattaa käyttää, jos tiedostonimissä voi olla välilyöntejä. Muuten saattaa tapahtua melkein mitä tahansa. ::)

Sitten vielä puretun tiedoston poisto. Tässä on käytettävä apushelliä, koska xargs osaa ajaa vain yhden komennon:
Koodia: [Valitse]
find saapuva/ -type f -iname '*.rar' -print0 |xargs -0 sh -c 'unrar x -o- "$0" && rm "$0"'Huomaa että shellin parametri on yksinkertaisissa hipsuissa ja unrar ja rm komentojen kaksinkertaisissa. && merkit aiheuttavat että rm-komento ajetaan vain jos unrar-komento onnistuu.

Ps. Olin vähän kahden laitanko tuon viimeisen. Nämä viritykset on yleensä semmoisia vaiheittain testattavia juttuja. Testiajossa on viisasta käyttää 1. kerralla echo komentoa varsinaisen komennon edessä tai paikalla ja ajaa oikeasti vasta kun näyttää järkevältä. Esim.
Koodia: [Valitse]
find saapuva/ -type f -iname '*.rar' -print0 |xargs -0 sh -c 'echo unrar x -o- "$0" && echo rm "$0"'
Ota varmuuskopiot! Älä aja roottina! (ainakaan eka kerralla)