Hlavní navigace

Chytrému napověz...

Michal Burda 24. 11. 2000

V tomto článku si ukážeme, jak si ulehčit práci s počítačem a některé rutinní záležitosti zautomatizovat. Sesbíral jsem pro vás pár jednoduchých skriptíků, které dokážou výrazně ulehčit práci. Jejich použití zvládnou i začátečníci a ty zkušenější z vás třeba alespoň inspirují. Konkrétně jsem se zaměřil na kopírování disket, práci se soubory a Internetem.

Všechny ukázky, které budou následovat, vyžadují ke svému běhu interpret jazyka Perl.

Hromadné přejmenovávání souborů

Úkolem následujícího krátkého prográmku je přejmenovat každý soubor, jehož jméno zadáte jako parametr na příkazové řádce, tak, že na konec jeho jména přidá písmeno „ l“. Skript slouží hlavně k přejmenovávání souborů *.htm na  *.html.

Tabulka č. 86
Soubor htm2html:
#!/usr/bin/perl
use locale;

foreach $file (@ARGV) {    # pro každý soubor dělej:
  $new = $file . 'l';      # vytvoř nové jméno souboru
  if (!-e $new) {          # jestliže soubor s takovým jménem neexistuje
    rename $file, $new;    # přejmenuj jej
  }
}

Zavoláním:

htm2html *.htm 

…provede přesně to, co se od něj čeká.

Prográmek můžete upravit tak, aby se přejmenovávání provádělo v podstatě jakkoliv. Stačí jen pozměnit 5. řádek, na kterém se nové jméno souboru ukládá do proměnné  $new.

Na tomto místě uvedu ještě jednu zajímavou modifikaci předchozího souboru:

Tabulka č. 87
Soubor 2lower:
#!/usr/bin/perl
use locale;

foreach $file (@ARGV) {    # pro každý soubor dělej:
  $new = lc($file);        # vytvoř nové jméno souboru
  if (!-e $new) {          # jestliže soubor s takovým jménem neexistuje
    rename $file, $new;    # přejmenuj jej
  }
}

Skript 2lower změní jména souborů tak, aby všechny byly tvořeny jen z malých písmen abecedy. Máme-li např. v aktuálním adresáři soubory Pokus.HTM, TEST.TXT, obr.gif, příkazem:

2lower * 

…se přejmenují na pokus.htm, test.txt, obr.gif.

Kopírování disket

Nic proti unixovské filozofii, ale mountování disků může být někdy pěkná otrava. Zvláště když potřebujete do počítače zkopírovat spoustu disket. Proč si práci nezjednodušit, že. Následující prográmek si disketu sám připojí, přesune z ní všechny soubory do aktuálního adresáře a zase odpojí. Program se opakuje tak dlouho, dokud odpovídáte ano (stiskem ENTER) na otázku „Další disketa?“.

Tabulka č. 88
Soubor mvfl:
#!/usr/bin/perl
use locale;

$floppy="/mnt/floppy";                     # adresář disketové jednotky

while (1) {                                # nekonečný cyklus
  system "mount $floppy";                  # připojení diskety

  foreach $x (<$floppy/.*>, <$floppy/*>) { # pro každý soubor,
    next if ($x eq "$floppy/.");           # který se nejmenuje "."
    next if ($x eq "$floppy/..");          # ani ".."
    system "mv -iv \"$x\" .";              # zavolej systémový příkaz mv
                                           # (přesun souborů i adresářů)
  }

  system "umount $floppy";                 # odpojení diskety

  print "Další disketa? (ENTER=Ano, CTRL+C=Ne)\n";
  <STDIN>;                                 # čekání na odpověď
}

Tip: Chcete-li soubory jen zkopírovat a z disket nemazat, nahraďte příkaz mv na 12. řádku voláním systémového programu  cp.

Stahování z Internetu

K dávkovému stahování z Internetu se velice hodí konzolový WWW prohlížeč Lynx. Spustíte-li jej s parametrem -source, místo interaktivní práce vypíše pouze soubor ze zadané URL adresy a skončí.

Tabulka č. 89
Příklad použití Lynxe pro neinteraktivní stahování z Internetu:  lynx -source 'http://www.linux.cz' > linux.html

Předcházející malá ukázka stáhne ze serveru www.linux.cz hlavní stránku a uloží ji do souboru  linux.html.

Lynx nemusíte používat jen ke stažení HTML souborů. Stejně dobře lze uvedeným způsobem získat jakýkoliv binární soubor nebo třeba obrázek.

Tip pro nadšené uživatele Perlu: Chcete-li psát v Perlu skriptíky, které budou pracovat s Internetem, obstarejte si knihovny „libnet“ a „libwww“ (LWP). Zkuste si man lwp nebo man lwpcook, kde je množství příkladů na přenos dat přes WWW v Perlu.

Hromadné nahrazování textu

K nahrazování textu v souborech pomocí regulárních výrazů slouží primárně příkaz sed. Stejně dobře jako sed (možná i lépe) můžete použít i interpret Perlu.

Tabulka č. 90
Hromadné nahrazování textu v souborech pomocí Perlu:  perl -p -i -e 's/něco/cosi/g' soubor

Předcházející jednořádkový příkaz nahradí v souboru soubor všechny výskyty řetězce něco řetězcem cosi. Zápis s/.../.../g je regulární výraz popisující, jak se má změna provést. Regulární výrazy jsou velmi silný nástroj, více se o nich dozvíte na man perlre nebo v článcích pana Satrapy.

Parametr soubor nemusí být jen název jednoho souboru. Klidně můžete použít „žolíky“ k vybrání několika souborů. Změny se potom dotknou každého z nich.

Chcete-li mít jistotu, že něco nepokazíte, můžete si všechny měněné soubory nechat zálohovat. Zadejte jen bezprostředně za volbu -i příponu záložních souborů a Perl vám záložní kopie vytvoří automaticky.

Tabulka č. 91
Nahrazení řetězce ‚main.html‘ řetězcem ‚index.html‘ ve všech souborech s příponou *.html (záloha se provede do *.bak):  perl -p -i.bak -e 's/main\.html/index\.html/g' *.html

Dejme tomu, že v aktuálním adresáři máme soubory index.html, main.html, download.html, products.html a prices.html. Aplikujeme-li na ně předcházející příkaz, ve všech zmíněných souborech se vyhledá řetězec main.html a nahradí se řetězcem index.html. Původní soubory se budou zálohovat do souborů index.html.bak, main.html.bak, download.html.bak, products.html.bakprices.html.bak.

Pokud cokoliv nefunguje

Je-li skriptík napsaný v Perlu, musíte mít pochopitelně jazyk Perl v počítači nainstalován. První řádek každého souboru systému říká, kde má hledat program, který kód zpracuje. Špatně zadaná cesta může být druhou příčinou, proč něco nefunguje. (Cestu k programu obvykle zjistíte příkazem  which jméno_programu.)

Další informace hledejte třeba na manuálových stránkách Perlu: man perl nebo ještě lépe  perldoc perl.

Disclaimer

V žádném případě si nedělám nárok, že zde uvedený způsob řešení problémů je jediný možný, natož pak nejvýhodnější. Jistě někdo najde sto padesát dalších způsobů, jak zde popsané problémy řešit a devadesát jich bude lepších, než ty moje.

Jistě jste si také všimli, že všechno je napsáno v Perlu. Je to proto, že tento jazyk se mi líbí a mnohé věci se v něm řeší snadněji, než přímo v shellech. V žádném případě však nechci nabádat nikoho, kdo se Perlu štítí, k tomu, aby si jej instaloval jenom proto, aby mohl používat tyhle utilitky. (Pro ty z vás, kteří nemají Perl v lásce mám domácí úkol: přepsat všechno v příkazech nějakého shellu. :-)

Našli jste v článku chybu?

15. 2. 2001 9:22

Matus Uhlar (neregistrovaný)

teda aspon na debiane umoznuje nieco taketo

rename 'regexp' subory
takze
rename 's/(.*)\((\d*)\).mp3/$2 - $1.mp3/' *.mp3
premenuje vsetky mp3 subory meno(01).mp3 na 01 - meno.mp3

v debiane patri do zakladneho balika perl a jeto super program... inde som ho zatial nevidel. zrejme je z perlu alebo z CPAN








28. 11. 2000 17:37

Michal Ambroz (neregistrovaný)

Mozna radeji pouzijte
1) "{}" aby se vam neztratily nekde nejaky soubory s mezerama v nazvu
2) trosku otodoxnejsi syntaxi prikazu find aby vam ten skritpt pripadne chodil i na sunech nebo na jinych unixech

Mozna nejak takhle:
r2lower:
  #!/bin/sh
  #pouziti: r2lower "x*"
  # r2lower "*.wav"

  find . -name "$1" -exec ./2upper "{}" ";"












Lupa.cz: Co se dá měřit přes Internet věcí

Co se dá měřit přes Internet věcí

Root.cz: Pinebook: linuxový notebook za 89 dolarů

Pinebook: linuxový notebook za 89 dolarů

Lupa.cz: Kdo pochopí vtip, může jít do ČT vyvíjet weby

Kdo pochopí vtip, může jít do ČT vyvíjet weby

Měšec.cz: Zdravotní a sociální pojištění 2017: Připlatíte

Zdravotní a sociální pojištění 2017: Připlatíte

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

Vitalia.cz: Paštiky plné masa ho zatím neuživí

Paštiky plné masa ho zatím neuživí

120na80.cz: Horní cesty dýchací. Zkuste fytofarmaka

Horní cesty dýchací. Zkuste fytofarmaka

Měšec.cz: Air Bank zruší TOP3 garanci a zdražuje kurzy

Air Bank zruší TOP3 garanci a zdražuje kurzy

Podnikatel.cz: 1. den EET? Problémy s pokladnami

1. den EET? Problémy s pokladnami

DigiZone.cz: ČT má dalšího zástupce v EBU

ČT má dalšího zástupce v EBU

Vitalia.cz: Mondelez stahuje rizikovou čokoládu Milka

Mondelez stahuje rizikovou čokoládu Milka

DigiZone.cz: Flix TV má set-top box s HEVC

Flix TV má set-top box s HEVC

Vitalia.cz: Jmenuje se Janina a žije bez cukru

Jmenuje se Janina a žije bez cukru

Podnikatel.cz: Babiše přesvědčila 89letá podnikatelka?!

Babiše přesvědčila 89letá podnikatelka?!

Vitalia.cz: Říká amoleta - a myslí palačinka

Říká amoleta - a myslí palačinka

DigiZone.cz: Rádio Šlágr má licenci pro digi vysílání

Rádio Šlágr má licenci pro digi vysílání

Lupa.cz: Teletext je „internetem hipsterů“

Teletext je „internetem hipsterů“

Podnikatel.cz: K EET. Štamgast už peníze na stole nenechá

K EET. Štamgast už peníze na stole nenechá

Lupa.cz: Proč firmy málo chrání data? Chovají se logicky

Proč firmy málo chrání data? Chovají se logicky

DigiZone.cz: Sony KD-55XD8005 s Android 6.0

Sony KD-55XD8005 s Android 6.0