Hlavní navigace

Chytrému napověz i podruhé...

Michal Burda

Před časem vyšel na Rootu článek ukazující možnosti zjednodušení práce s počítačem pomocí skriptování a setkal se s takovým ohlasem, že by byl hřích neudělat pokračování. Tak tedy, pohodlně se usaďte a nechte si napovědět i podruhé...

Číslování souborů

V minulém dílu jsem uveřejnil dvě utilitky sloužící k přejmenovávání souborů. Ani dnes si jednu neodpustím:

Tabulka č. 96
Soubor num: #!/usr/bin/perl
use locale;

if (@ARGV < 4) {
  print "Použití: num <prefix> <postfix> <od> <soubory>... ";
  exit;
}

$prefix = shift(@ARGV);
$postfix = shift(@ARGV);
$from = shift(@ARGV);

foreach $file (@ARGV) {
  $new = sprintf("%s%04d%s", $prefix, $from, $postfix);
  $from++;
  if (!-e $new) {
    rename $file, $new;
  }
}

Tento malý skriptík je opět v jazyce Perl a vyžaduje nejméně čtyři argumenty příkazové řádky: prefix, postfix, číslo_od a nejméně jeden název souboru. Jeho úkolem je přejmenovat všechny zadané soubory tak, aby získaly jméno tvaru:  <prefix><číslo><postfix>.

Spustíte-li program například takto:

num "file" "" 0 * 

…přejmenují se všechny soubory aktuálního adresáře na tvar:

file0000
file0001
file0002
...

Voláním:

num "img" ".jpeg" 10 *.jpg 

…přejmenujete všechny soubory aktuálního adresáře, které mají příponu .jpg  na:

img0010.jpeg
img0011.jpeg
img0012.jpeg
...

Jak prográmek funguje? Pole @ARGV je seznam argumentů příkazové řádky. Příkazem shift(@ARGV) se vrátí (a z pole odstraní) první položka. Inicializují se tak proměnné $prefix, $postfix a $od. Následuje cyklus „foreach“, který pokaždé vyrobí nové jméno souboru ($new), zvýší počítadlo $from a soubor přejmenuje.

Úklid na disku

Pokud v Linuxu zhavaruje nějaký program, obvykle po sobě zanechá soubor core. Slouží k ladicím účelům, uchovává v sobě totiž podmínky, při kterých došlo ke zhroucení programu, ale pro obyčejného uživatele je naprosto k ničemu. V mnohých případech zabírá docela dost místa, a tak je vhodné je občas z disku vymazat.

Následující prográmek prochází zadaným adresářem včetně podadresářů (nebo pokud počáteční adresář nezadáte, celým adresářovým stromem) a hledá soubory core. Pokud nějaký nalezne, zeptá se vás, jestli jej chcete smazat a poté ho z disku odstraní.

Tabulka č. 97
Soubor rmcore:

#!/bin/bash

DEST=${1:-"/"}
find "$DEST" -name core -and -type f -exec rm -i {} ;

Nechcete-li, aby se vás skript neustále ptal, jestli má soubor zrušit, jednoduše odstraňte volbu -i za příkazem  rm.

Zavedení aliasů

Aliasy přišly původně z C-shellu, ale dnes je podporuje už snad každý příkazový interpretr. Slouží k definici nových příkazů pomocí substituce řetězce. Příkazem alias si pojmenujete krátkým názvem nějaký složitý příkaz a v příkazovém interpretru jej pak používáte místo toho dlouhého. O aliasech se více dozvíte třeba v manuálových stránkách BASHe ( man bash) – já zde uvedu jen pár užitečných možností, jejichž vložení do vašeho systému by mohlo stát za zvážení.

alias ls='ls --color'
alias lsa='ls -a'
alias lsl='ls -l -a'

Touto trojicí jsme vytvořili aliasy příkazu ls. Napíšeme-li nyní samotné ls, příkazový procesor zjistí, že se jedná o alias a rozvine jej do příkazu ls --color, což znamená barevný výpis obsahu adresáře. Zadáme-li lsa, alias se rozvine na ls -a, ale ls je rovněž alias, takže výsledkem bude ls --color -a, tedy barevný výpis všech souborů adresáře. Podobně je to i s příkazem lsl  – ten se rozvine na ls --color -l -a (dlouhý barevný výpis všech souborů adresáře).

Jak je vidět, aliasy se uplatňují rekurzivně – ale nemusíte mít strach, systém je proti nekonečné smyčce dobře ochráněn.

Aliasy můžete také použít k eliminaci překlepů. Já například často místo make napíšu maek nebo mkae. Výrazně jsem si urychlil práci zavedením aliasů:

alias maek=make
alias mkae=make

Vždy, když se spletu, systém správně pochopí, co vlastně chci…

Občas se hodí vyrobit i alias na příkaz pro přechod do nějakého adresáře:

alias cdfl='cd /mnt/floppy'
alias cdcd='cd /mnt/cdrom'
alias cddoc='cd /usr/doc'
alias cdetc='cd /etc'

Můžete namítnout, že pro takové účely je zde proměnná prostředí CDPATH, ale jistě uznáte, že napsání cdfl je podstatně kratší než  cd floppy

(Do proměnné prostředí CDPATH se ukládají celé cesty k oblíbeným adresářům. V příkazu cd pak místo absolutní cesty stačí zadat jednoduché jméno oblíbeného adresáře.)

Mohli bychom pokračovat třeba mountováním:

alias mntfl='mount /mnt/floppy; cd /mnt/floppy'
alias mntcd='mount /mnt/cdrom; cd /mnt/cdrom'
alias umntfl='umount /mnt/floppy'
alias umntcd='umount /mnt/cdrom'

Alias mntfl namountuje disketu a rovnou do ní přejde. Stejně tak mntcd, které mountuje pro změnu jednotku CD-ROM. Co dělají umntfl a umntcd, jistě dokážete uhodnout sami.

Chcete-li mít své aliasy k dispozici ihned po každém přihlášení, zapište je do souboru .bashrc (pokud používáte jako shell BASH) ve svém domovském adresáři:

Tabulka č. 98
Soubor ~/.bashrc:

alias maek=make
alias mkae=make
alias mntfl='mount /mnt/floppy; cd /mnt/floppy'
alias mntcd='mount /mnt/cdrom; cd /mnt/cdrom'

Od příštího spuštění příkazového interpretru je už budete mít zavedeny…

A to je pro dnešek vše. Máte-li sami nějaké nápady a vylepšení, se kterými byste se chtěli podělit s ostatními čtenáři, neváhejte a využijte diskuzní fórum k tomuto článku.

Našli jste v článku chybu?

21. 2. 2001 13:44

Bob Blade (neregistrovaný)

Mezi "Shellem" a PERLem (nebo treba i Pythonem) je obrovsky koncepcni rozdil! PERL je autonomni programovaci jazyk a je tedy i (teoreticky) prenositelny. To, co je mysleno pod pojmem programovani shellu je analogie BATek z DOSu - jedna se jen o SOUBOR UNIXOVYCH PRIKAZU, ktere jsou provedeny v davce. Z toho vyplyva, ze neni mozne naucit se uplne programovat v shellu :-o, stejne jako neni mozne naucit se cely Unix, je to totiz jedno a to same! Ale pokud pracujete s Linuxem, tak se casem naucite ne…

15. 2. 2001 9:24

Matus Uhlar (neregistrovaný)

skript rename z debianu - balika perl dokaze este viac

rename 'expression' subory

takze kto vie zadat nejaku dobru regular expression, pride si na svoje





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: Jak vymáhat výživné zadarmo?

Jak vymáhat výživné zadarmo?

Lupa.cz: Brněnský radní chce zničit kartel operátorů. Uspěje?

Brněnský radní chce zničit kartel operátorů. Uspěje?

Měšec.cz: U levneELEKTRO.cz už reklamaci nevyřídíte

U levneELEKTRO.cz už reklamaci nevyřídíte

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

Přehledná titulka, průvodci, responzivita

Vitalia.cz: Znáte „černý detox“? Ani to nezkoušejte

Znáte „černý detox“? Ani to nezkoušejte

Podnikatel.cz: Chtějte údaje k dani z nemovitostí do mailu

Chtějte údaje k dani z nemovitostí do mailu

Vitalia.cz: Proč vás každý zubař posílá na dentální hygienu

Proč vás každý zubař posílá na dentální hygienu

Lupa.cz: Propustili je z Avastu, už po nich sahá ESET

Propustili je z Avastu, už po nich sahá ESET

Lupa.cz: Insolvenční řízení kvůli cookies? Vítejte v ČR

Insolvenční řízení kvůli cookies? Vítejte v ČR

120na80.cz: Na ucho teplý, nebo studený obklad?

Na ucho teplý, nebo studený obklad?

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

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

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

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

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

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

Podnikatel.cz: Zavře krám u #EET Malá pokladna a Teeta?

Zavře krám u #EET Malá pokladna a Teeta?

120na80.cz: Pánové, pečujte o svoje přirození a prostatu

Pánové, pečujte o svoje přirození a prostatu

DigiZone.cz: Recenze Westworld: zavraždit a...

Recenze Westworld: zavraždit a...

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

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

Vitalia.cz: Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

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

1. den EET? Problémy s pokladnami