Fórum Ubuntu CZ/SK

Ubuntu pro osobní počítače => Software => Příkazový řádek a programování pro GNU/Linux => Téma založeno: tomk 11 Července 2010, 00:44:21

Název: Skript v bashi pro rozkopirovani dokumentu
Přispěvatel: tomk 11 Července 2010, 00:44:21
Dobrý den
Mám hromadu dokumentu a chtěl by jsem si v nich
a) udělat pořádek
Zkoušel jsem to na WIN ale po 2 dnech ručního třídění a hotovo je 5 % toho mám dost. Zkopíroval jsem si do UBUNTU (1,5 G dokumentů) že se to nějak pokusím ale bohužel z příkazovou řádkou nejsem největší kamarád.
Jestli někdo ví jak to zautomatizovat v bashi (scriptem) budu rád.
Format názvu dokumentu :
Příjmení_Jméno-Název dokumentu.zip
np:
Taufer_Libor-Kontrola_OUR_2009_O7.zip
Trefný_Jiří-Seznam_povolených_hodnot.zip
Chtěl by jsem zbavit diaktiriky (soubory vznikly ve WIN 1250 a dělaji znaky typu ŸØ atd ) a rozbalit do složek
T  (počateční písmeno příjmení)
  Taufer_Libor
     .................
  Trefny_Jiri
     Seznam_povolenych_hodnot.doc
     ..........
U
atd.
Pak si to zazipuji jako celek a doufám že se v tom půjde vyznat líp.

b) umět vyhledat nějaký dokument. Zkoušel jsem různě np. ls %OUR_2009% a ani ls -- help nenapověděl.

Ve vzorových skriptech jsem to taky nenašel.
Název: Re: Skript v bashi pro rozkopirovani dokumentu
Přispěvatel: donny 11 Července 2010, 01:37:31
#!/bin/bash
WORKDIR="./soubory/"
# jina ceska kodovani: UTF-8 ISO_8859-2 CP1250
ENCODING_FROM="WINDOWS-1250"

cd $WORKDIR
for s in *; do
        novy=$(echo $s | sed "s/-/\//" | iconv -c -f $ENCODING_FROM -t US-ASCII//TRANSLIT)
        mkdir -p $(dirname $novy)
        mv $s $novy
done


Neni to bůhvíjakej výtvor, ale mělo by to fungovat, pokud ta maska je taková, že první pomlčka ve starém názvu souboru odděluje nový podadresář od nového názvu souboru.
Název: Re: Skript v bashi pro rozkopirovani dokumentu
Přispěvatel: donny 11 Července 2010, 01:46:14
Ještě jsem zapomněl na b) - doporučuji tento článek - http://www.abclinuxu.cz/clanky/unixove-nastroje-14-find

Případně já například používam obvykle utilitku locate, viz např. http://www.devdaily.com/blog/post/linux-unix/use-linux-locate-command nebo man locate
Název: Re: Skript v bashi pro rozkopirovani dokumentu
Přispěvatel: tomk 18 Července 2010, 21:55:53
Dík funguje to super. Akorát kdyby jsem uměl pracovat z těmi zástupnými znaky nebo co to "s/-/\//" je. stejně moc ten script nechápu ale pracuje tak jak chci.
Může mi to někdo pomoct přelouskat ?
for s in *; do   
\* předpokládám že prochází složku ve které je pro soubory masky * a ukládá názvy do proměnné s  * \
novy=$(echo  $s |  sed "s/-/\//"  | iconv  -c -f $ENCODING_FROM -t US-ASCII//TRANSLIT)
\*
s=Taufer_Libor-Kontrola_OUR_2009_O7.zip
novy=Taufer_Libor/Kontrola_OUR_2009_O7.zip
řádek který moc nechápu tvorba názvu  souboru o prikazu sed jsem se dočetl :
Ne-li zadán žádný z přepínačů -e, --expression, -f nebo --file, pak první
argument, který není přepínačem, je považován za sedový skript a bude
vykonán.
ale stejně nejsem z toho chytrý co vlastně udělá z argumentu "s/-/\//" nějak tam vrazí / místo -
*\
 

Název: Re: Skript v bashi pro rozkopirovani dokumentu
Přispěvatel: pacholik 18 Července 2010, 22:24:20
jj, sed 's/puvodni/novy/'
Kód: [Vybrat]
$ echo abcdef | sed 's/ab/xy/'
xycdef
http://www.abclinuxu.cz/clanky/navody/unixove-nastroje-9-sed-nahrazovani-textu