-
Vytvoříme si knihu Fimfárum na webových stránkách
přepněte se do ~/public_html
vytvořte adresář fimfarum a přepněte se do něj
(mkdir ~/public_html/fimfarum;cd fimfarum)
zkopírujte si /usr/html/NMIN266/fimfarumhtm.tar do ./
(cp /usr/html/NMIN266/fimfarumhtm.tar ./)
rozbalte jej
(tar xvf fimfarumhtm.tar)
vytvořte soubor index.htm, ve kterém bude seznam všech souborů s koncovkou htm
(ls *htm > index.htm)
01-kolobezka.htm
02-fimfarum.htm
03-obri.htm
04-listi_z_dubu.htm
05-barka.htm
06-lina.htm
07-more.htm
08-sen.htm
09-sestry.htm
10-palecek.htm
11-nebojsa.htm
12-synove.htm
13-veterani.htm
14-vrabec.htm
15-hrbaci.htm
16-usporna.htm
soubor index.htm si otevřete ve vim a pomocí regulárního výrazu upravte všechny řádky na tvar:
<a href=xxxxx.htm>xxxxx.htm</a><br>
kde xxxxx je název příslušné kapitoly
(:%s/^\(.*\)/<a href=\1>\1<\/a><br>/)
ve webovém prohlížeči si otevřete adresu https://www.karlin.mff.cuni.cz/~[vaše uživatelské jmého]/fimfarum
dostanete seznam kapitol - zkuste na některou kliknout ...
v souboru je "v nepořádku" čeština - opravíme ji tak, že na začátek každého souboru přidáme
<meta charset=utf-8>
nebudeme to dělat po jednotlivých souborech, ale použijeme cyklus v bash
for f in [0-9]*
do
mv $f $f.00 #
echo "<meta charset=utf-8>" > $f
cat $f.00 >> $f
done
teď můžeme zkontrolovat na webu jestli je četina v pořádku ...
... toto byla dlouhá příprava
vše to uděláme (o něco lépe pomocí krátkého skriptu)
#!/bin/bash
echo "<meta charset=utf-8> > index.htm
for f in *htm
do
nazev=`head -n 1 $f`
mv $f $f.00
echo "<meta charset=utf-8> >> $f
cat $f.00 >> $f
echo "<a href=$f>$nazev</a><br>" >> index.htm
done
rm *.00
-
vytvořte soubor bmi.sh, který bude počítat BMI (bmi=hmotnost/(vyska2)) a to takto:
-
v první variantě zadáme do souboru bmi.sh jméno/výšku/hmotnost takto:
jmeno=Jaroslav
vyska=172
hmotnost=62
...
pak vypíše bmi
-
v další variantě se skript na jméno/výšku/hmotnost zeptá a pak BMI vypíše
-
dále skript upravíme tak, aby nás podle našeho BMI vyhodnotil takto:
BMI<16.5 - podvýživa
16.5<BMI<18.5 - podváha
18.5<BMI<25.0 - ideální váha
25.0<BMI<30.0 - nadváha
30.0<BMI<35.0 - obezita 1.stupně
35.0<BMI<40.0 - obezita 2.stupně
BMI>40.0 - morbidní obezita
-
dále skript upravíme tak, že si jméno,výšku a váhu vezme jako parametr
-
dále se skript rozhodne podle toho jestli dostal parametry nebo ne. V případě, že parametry nedostal, tak se zeptá
-
poslední variantu skriptu použijeme tak, že jmeno/výšku/hmotnost budeme mít zadanou v souboru
-
mazání souborů *.log v aktuálním adresáři bez chybových hlášek
přepněte se do ~/NMIN266/tex2/
rozbalte si soubor $kam/tex2.tar.gz
smažte všechny soubory *.log v adresáři letter
a pak to zkuste ještě jednou - dostaneme chybovou hlášku
rm: cannot remove `*.log': No such file or directory
vytvořte skript, který smaže v daném adresáři všechny soubory *.log
bez chybových hlášek
mazani1.sh
#!/bin/bash
for f in `ls * | grep "\.log"`;
do
rm $f;
done
skript otestujte (spusťte ho 2x) v adresáři ~/NMIN266/tex2/ruzne
... existuje jednodušší řešení?
-
mazání souborů *.log v aktuálním adresáři a jeho podadresářích bez chybových hlášek navíc s informací kolik souborů bude smazáno
mazani2.sh
#!/bin/bash
echo "Bude smazáno "
find ./ -name "*.log" | wc -l
echo souborů s koncovkou log.
for f in `find ./ -name "*.log"`;
do
rm $f;
done
- mazání souborů, které nemají koncovku tex nebo pdf
mazani3.sh
#!/bin/bash
for f in `find * | grep -v "\.tex" | grep -v "\.pdf"`;
do
rm $f;
done
POZOR ! soubory s koncovkou sh budou také smazány ...
při spuštění tohoto skriptu se objeví chybové hlášení při pokusu o mazání adresáře
možná dvě řešení:
nepříliš korektní:
#!/bin/bash
for f in `find * | grep -v "\.tex" | grep -v "\.pdf" | grep -v "\.sh"`;
do
rm $f 2>/dev/null;
done
lepší řešení:
#!/bin/bash
echo souborů.
for f in `find * | grep -v "\.tex" | grep -v "\.pdf" | grep -v "\.sh"`;
do
if [ ! -d $f ]
rm $f;
done
- změna názvů souborů na malá písmenka
rozbalte si soubor
malapismena.tar.gz
pomocí příkazu tr můžeme převést řetězec napsaný velkými písmeny na malá
echo ABC | tr "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz"
vytvoříme skript, který přejmenuje všechny soubory v adresáři i podadresářích, tak aby názvy byly jen malými písmeny
mala.sh
#!/bin/sh
for f in `find ./ -name "*"`;
do
mv $f `echo $f | tr "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz"`;
done
malé vylepšení (bez chybových hlášek)
#!/bin/sh
for f in `find ./ -name "*" | grep [A-Z]`;
do
mv $f `echo $f | tr "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz"`;
done
-
5.úloha 1. z 7.3.2024 efektivněji
smazání adresáře ~/NMIN266/fimfárum
rozbalte si soubor fimfarum.tar.gz
vytvořte si adresáře dokumenty a obrazky
presun1.sh
#!/bin/sh
for f in `file soubor* | grep PDF | sed 's/:.*$//'`;
do
mv $f ./dokumenty/${f}.pdf;
done
for f in `file soubor* | grep PNG | sed 's/:.*$//'`;
do
mv $f ./obrazky/${f}.png;
done
for f in `file soubor* | grep JPEG | sed 's/:.*$//'`;
do
mv $f ./obrazky/${f}.jpeg;
done
anebo
příprava:
novejmeno=`file soubor01 | sed "s/^\(.*\): \([A-Z\]*\).*$/\1.\2/"`
echo $novejmeno
nyní v cyklu:
for f in `find *`;
do
novejmeno=`file $f | sed "s/^\(.*\): \([A-Z\]*\).*$/\1.\2/"`;
mv $f $novejmeno;
done
-
Zkopírute si soubor /usr/html/NMIN266/foto.tar.gz do svého domovského adresáře
rozbalte ho příkazem:
tar xzvf foto.tar.gz
Původní zazipovaný soubor smažte.
rm foto.tar.gz
V adresáři foto jsou čtyři složky 2011,2012,2013,2014
v každé složce je několik dalších složek v kterých jsou jednak
fotografie ve formátu jpg, ale také ve formátu "raw" tj. soubory
s koncovkou nef. Naším úkolem bude:
- Zjistit kolik je zde souborů nef
- Zjistit jaké místo na disku zabírají všechny soubory nef
for f in `find ./ -name "*.nef"`
do
ls=`ls -l $f`
size=`echo $ls | sed "s/^.*guest \([0-9]*\).*$/\1/"`
echo $size >> velikosti
done
Soubor velikosti upravit pomoci RE na tvar:
echo $[123+234+...+568]
tj.
%s/\n/=/g
s/^/echo $[/
s/$/]
a spustit
bash velikosti
- Pro všechny adresáře 2011-2014 vytvořit (cyklem) adresáře 2011.raw-2014.raw
(představte si, že nejsou jen čtyři, ale je jich třeba třicet)
for f in `ls`
do
mkdir $f.raw
for g in `ls $f`
do
mkdir $f.raw/$g
mkdir $f.raw/$g/raw
done
done
-
Všechny soubory nef z adresářů 2011-2014 přesunout do adresářů 2011.raw-2014.raw
se zachováním adresářové struktury
Příprava
for f in `find ./ -name "*.nef"`
do
g=`echo $f | sed "s/\([0-9]\{4\}\)/\1.raw/"`
echo $g
done
Na ostro:
for f in `find ./ -name "*.nef"`
do
g=`echo $f | sed "s/\([0-9]\{4\}\)/\1.raw/"`
mv $f $g
done
-
Vytvořte si soubor emaily.txt s tímto obsahem:
richter
linek
salavcova
slefrova
zahorec
Pomocí RE přidejte na konec každého řádku @karlin.mff.cuni.cz (ESC :%s/$/@karlin.mff.cuni.cz)
Z /usr/html/NMIN266/ si do stejného umístění zkopírujte soubory swans.jpg a escher.txt
naším úkolem bude rozeslat všem lidem ze souboru emaily.txt rozeslat dopis kde:
subject: escher
tělo dopisu: eshcer.txt
příloha dopisu:swans.jpg
Pro rozesílání použijeme program mutt s těmito parametry:
mutt -s "subject" "emailova adresa" < telo dopisu (soubor) -a priloha ;echo emailova aderesa Odeslano; sleep 2;
BASH skript bude vypadat takto:
#!/bin/bash
dopis=escher.txt
priloha=swans.jpg
subject="M.C.Escher"
for email in `cat emaily.txt`
do
mutt -s "$subject" "$email" < $dopis -a $priloha ;echo $email Odeslano; sleep 2;
done