Hlavní navigace

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

13. 2. 2001
Doba čtení: 4 minuty

Sdílet

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:

CS24_early

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.

Byl pro vás článek přínosný?

Autor článku

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.