Hlavní navigace

Chytrému napověz i potřetí...

Michal Burda 2. 11. 2001

Již potřetí se setkáváme u nepravidelného seriálu plného různých (doufám) užitečností, které by měly alespoň trochu ulehčit každodenní otročinu v Linuxu.

Oboustranný tisk

První vychytávkou, kterou si dnes ukážeme, je jednoduchý skript na oboustranný tisk:

Soubor print2p:

#!/bin/bash
FILE=${1?"První argument musí být název PostScriptového souboru!"}
MAGN=${2:-1}

echo "Tisknu liché stránky..."
mpage -$MAGN -o -bA4 -r -j 1%2 "$FILE" | lpr
echo -n "Vložte vytištěné stránky zpět do "
echo "tiskového zásobníku a stiskněte ENTER."
read
echo "Tisknu sudé stránky..."
mpage -2 -o -bA4 -j 2%2 "$FILE" | lpr

Skript je určen hlavně pro uživatele, kteří tiskárnu používají sami. Pokud tisknete na nějaké vzdálené mašince, musíte nějak zajistit, aby se mezitím nepokusil tisknout ještě někdo jiný…

Uvedený prográmek očekává dva argumenty: název tištěného souboru a nepovinně také poměr zmenšení. Tak například volání:

print2p soubor.ps

vytiskne soubor soubor.ps tak, že nejprve pošle na tiskárnu jenom liché stránky (odzadu), vyzve uživatele, aby vytištěnou část vložil zpět do tiskového zásobníku, a po stisku Enteru dotiskne odpovídající sudé stránky (od začátku). Takto nakonec dostaneme celý dokument soubor.ps vytištěný pěkně oboustranně.

Zadáme-li

print2p soubor.ps 4

vytisknou se čtyři stránky dokumentu na jednu fyzickou stranu papíru – ovšem rovněž oboustranně. Další možné volby pro druhý argument jsou 1, 2 nebo 8.

Jak jste si jistě všimli, jádrem skriptu je program mpage, který se vlastně stará o všechno. Jeho parametry –1, –2, –4 nebo –8 určují, kolik stran dokumentu se má vytisknout na jednu fyzickou stranu papíru. Pomocí -b se volí výstupní formát papíru (v našem případě A4), -o říká, že nechceme kolem stránek žádné orámování, a -j definuje výběr stran, které se budou tisknout (sudé, nebo liché). Zapomněl jsem ještě na parametr -r, jenž programu mpage přikazuje, aby stránky tisknul v opačném pořadí (od poslední k první).

mpage akceptuje i další volby. Doporučuji vám prostudovat si příslušné manuálové stránky (man mpage).

Konverze manuálových stránek

Možná jste někdy potřebovali zkonvertovat rozličné manuálové stránky do PostScriptu či HTML. Umí to utilitka groff:

groff -mandoc -Tps bash.1 > bash.ps
groff -mandoc -Thtml bash.1 > bash.html

První příkaz zkonvertuje manuálovou stránku bashe do PostScriptu a druhý na HTML stránku…

which & file

Sám na sobě jsem vypozoroval, že když pomocí which zjišťuji, kde se nachází nějaký spustitelný soubor, obvykle potom následuje příkaz file zkoumající, co že je ten soubor zač (jestli kompilovaný program nebo nějaký čitelný skriptík). Mnoho zbytečných úhozů na klávesnici mi pak ušetří následující banalita, kterou jsem si nazval whfile:

#!/bin/bash
C=${1?"První argument musí být název programu!"}
X=`which "$C"` && file -b "$X" && ls -la "$X"

Tak například volání:

whfile bash

dá na výstup podrobné informace o interpretu bashe:

/bin/bash
ELF 32-bit LSB executable, Intel 80386, version 1,
dynamically linked (uses shared libs), stripped
-rwxr-xr-x    1 root     root       512540 srp 22  2000 /bin/bash

Rozdělování souboru na menší kousky

Ti z vás, kteří jste občas nuceni přenášet kvanta dat mezi počítači na disketách, jste jistě narazili na problém, jak na tato archaická média dostat soubor, který má třeba 10 mega bajtů. Pokud vím, ani gzip ani tar rozkládat archiv na více menších částí neumí. K tomuto účelu byl pány Granlundem a Stallmanem vytvořen příkaz split:

split <VOLBA> [<VSTUP> [<PREFIX>]]

Například příkaz, který následuje, rozdělí soubor archiv.tgz na několik částí o velikosti 100 KB:

split -b 100k "archiv.tgz" "archiv.tgz."

Výsledné souborky se budou jmenovat podle zadaného prefixu archiv.tgz.aa, archiv.tgz.ab, archiv.tgz.ac a tak dále.

Možná se vám bude hodit tento malý skriptík, který z adresáře zadaného jako jediný parametr vytvoří zagzipovaný tarovský archiv stejného jména, a ten podle potřeby rozdělí na menší části tak, aby se vešly na diskety:

Soubor pak:

#!/bin/bash

NAME=${1?"První argument musí být jméno pakovaného adresáře!"}
SIZE="1400k"  # DOS-formátované (-23 kB na vadné sektory)

if [ -d "$NAME" ]; then
  ARCHIVE=`basename "$NAME"`
  tar -cvz "$NAME" | split -b "$SIZE" - "${ARCHIVE}.tgz."
fi

Spojení souborů do původního archivu by měl zajistit příkaz:

cat archiv.tgz.* > archiv.tgz

Další věcí, která mě asi nejvíce irituje, je kopírování těchto souborů na diskety. Při ručním přesouvání to je samé mount a umount, však to znáte. Kdysi v minulých dílech jsme řešili kopírování z disket a dnes vám ukážu jeden ze způsobů, jak jít opačnou cestou – tedy automatizovaně dostat soubory na diskety:

#!/bin/bash

FLOPPY=/mnt/floppy

while [ "$1" != "" ]; do
  echo "Vložte prosím disketu a stiskněte ENTER (CTRL+C=přerušit)"
  read
  mount "$FLOPPY"
  mv -iv "$1" "$FLOPPY"
  umount "$FLOPPY"
  shift
done

Uvedený skript je velice jednoduchý. Hodí se takřka jen na výstupy nějakého splitu. Každý soubor, který zadáte jako parametr, přesune na novou disketu. Bylo by hezké jej udělat tak, aby si kontroloval velikosti kopírovaných souborů a ukládal na diskety trochu inteligentněji. Já jsem ale příliš sexy, abych se tím zabýval. :-)

Tímto prográmkem se také pro dnešek rozloučíme. Doufám, že jste v mých prostinkých výtvorech nalezli něco zajímavého, nebo že vás alespoň trochu inspirovaly.

Našli jste v článku chybu?

7. 11. 2001 10:33

Pavel Riha (neregistrovaný)

me se nejvic libi na rozdelovani rar
ale neni free :(


5. 11. 2001 8:29

Michal Burda (neregistrovaný)

Jiste, dekuji za upozorneni.

Jeste upresnim, ze by to melo byt:
mpage -$MAGN -o -bA4 -j 2%2 "$FILE" | lpr




DigiZone.cz: Česká televize mění schéma ČT :D

Česká televize mění schéma ČT :D

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

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

Podnikatel.cz: Vládu obejde, kvůli EET rovnou do sněmovny

Vládu obejde, kvůli EET rovnou do sněmovny

Lupa.cz: Slevové šílenství je tu. Kde nakoupit na Black Friday?

Slevové šílenství je tu. Kde nakoupit na Black Friday?

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

Přehledná titulka, průvodci, responzivita

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

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

Sony KD-55XD8005 s Android 6.0

DigiZone.cz: NG natáčí v Praze seriál o Einsteinovi

NG natáčí v Praze seriál o Einsteinovi

Lupa.cz: UX přestává pro firmy být magie

UX přestává pro firmy být magie

Lupa.cz: Babiš: E-shopů se EET možná nebude týkat

Babiš: E-shopů se EET možná nebude týkat

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

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

Vitalia.cz: Baletky propagují zdravotní superpostel

Baletky propagují zdravotní superpostel

Podnikatel.cz: Víme první výsledky doby odezvy #EET

Víme první výsledky doby odezvy #EET

Vitalia.cz: To není kašel! Správná diagnóza zachrání život

To není kašel! Správná diagnóza zachrání život

120na80.cz: Rakovina oka. Jak ji poznáte?

Rakovina oka. Jak ji poznáte?

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

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

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

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

Vitalia.cz: Tesco: Chudá rodina si koupí levné polské kuře

Tesco: Chudá rodina si koupí levné polské kuře

Root.cz: Vypadl Google a rozbilo se toho hodně

Vypadl Google a rozbilo se toho hodně

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

1. den EET? Problémy s pokladnami