Internet Info, s.r.o. Lupa Měšec Podnikatel Root Zdroják DigiZone Slunečnice Vitalia TopDrive KupDnes Navrcholu NovýTarif Dobrý web Weblogy Woko Jagg Computer.cz SK: MojeLinky

Hlavní navigace

Chytrému napověz...

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.

Tweetni to Twitter Jaggni to! Jagg Del.icio.us Delicious

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. :-)

Michal Burda

Michal Burda

Michal Burda vystudoval informatiku a aplikovanou matematiku a nyní pracuje na Ostravské univerzitě jako odborný asistent. Zajímá se o data mining, Javu a Linux.

Školení: Návrh a používání MySQL databáze

 

Naučte se používat jednu z nejrozšířenějších databází. Dozvíte se vše potřebné od návrhu až po samotné využití MySQL v projektech.

Školení pro všechny, kteří se chtějí naučit efektivně pracovat s MySQL nebo se v práci s touto databází zlepšit.

Přihláška a podrobné informace

Ohodnoťte jako ve škole:
Průměrná známka 3,15

Přehled názorů

Link?
Dusan Holub 24. 11. 2000 07:26
Nový
└ 
Re: Link?
Vladimir Bobek 24. 11. 2000 11:15
Nový
Tisk....?
Pavel 24. 11. 2000 08:51
Nový
└ 
Re: Tisk....?
Tomáš Krause 25. 11. 2000 23:53
Nový
Shell x Perl
Vladimír Marek 24. 11. 2000 13:59
Nový
├ 
Re: Shell x Perl
dominik sauer 24. 11. 2000 14:34
Nový
└ 
Re: mvfl v Shellu
Michal Burda 25. 11. 2000 09:55
Nový
 
└ 
Re: mvfl v Shellu
Vladimír Marek 25. 11. 2000 17:33
Nový
Bash + Perl
Jan Spitalnik 24. 11. 2000 15:24
Nový
shell x perl
Zdeněk Vráblík 24. 11. 2000 15:51
Nový
└ 
Re: shell x perl
Wasik 24. 11. 2000 17:06
Nový
Shell x Perl
Michal Ambroz 24. 11. 2000 17:47
Nový
Obsah
alcron 25. 11. 2000 14:35
Nový
├ 
Re: Obsah
Vladimír Marek 25. 11. 2000 17:39
Nový
├ 
Re: Obsah
MIXA 25. 11. 2000 19:20
Nový
├ 
Re: Obsah
Petr Sidlo 27. 11. 2000 08:24
Nový
├ 
Re: Obsah
Martin Horák 27. 11. 2000 09:32
Nový
├ 
Re: Obsah
Michal Ambroz 27. 11. 2000 15:11
Nový
└ 
Re: Obsah
Michal Burda 28. 11. 2000 15:13
Nový
Rekurze
Frn 27. 11. 2000 15:38
Nový
├ 
Re: Rekurze
Thorn 28. 11. 2000 09:58
Nový
├ 
Re: Rekurze
Michal Burda 28. 11. 2000 14:32
Nový
└ 
Re: Rekurze
Michal Ambroz 28. 11. 2000 17:37
Nový
rename z balika perl
Matus Uhlar 15. 2. 2001 09:22
Nový
       

Tento text je již více než dva měsíce starý. Chcete-li na něj reagovat v diskusi, pravděpodobně vám již nikdo neodpoví. Pro řešení aktuálních problémů doporučujeme využít naše diskusní fórum.

Zasílat nově přidané příspěvky e-mailem