Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: Skript v bashi pro rozkopirovani dokumentu  (Přečteno 1778 krát)

tomk

  • Návštěvník
  • Příspěvků: 38
Skript v bashi pro rozkopirovani dokumentu
« kdy: 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.

donny

  • Závislák
  • ***
  • Příspěvků: 1861
Re: Skript v bashi pro rozkopirovani dokumentu
« Odpověď #1 kdy: 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.
« Poslední změna: 11 Července 2010, 01:40:04 od donny »
archlinux @ i7-6700/GTX1080 8G/32G DDR4/.5TB NVMe/WD RED 3TB | Raspbian 8 @ Raspberry Pi
Ever tried. Ever failed. No matter. Try again. Fail again. Fail better!

donny

  • Závislák
  • ***
  • Příspěvků: 1861
Re: Skript v bashi pro rozkopirovani dokumentu
« Odpověď #2 kdy: 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
« Poslední změna: 11 Července 2010, 01:49:27 od donny »
archlinux @ i7-6700/GTX1080 8G/32G DDR4/.5TB NVMe/WD RED 3TB | Raspbian 8 @ Raspberry Pi
Ever tried. Ever failed. No matter. Try again. Fail again. Fail better!

tomk

  • Návštěvník
  • Příspěvků: 38
Re: Skript v bashi pro rozkopirovani dokumentu
« Odpověď #3 kdy: 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 -
*\
 


pacholik

  • Závislák
  • ***
  • Příspěvků: 2072
Re: Skript v bashi pro rozkopirovani dokumentu
« Odpověď #4 kdy: 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

 

Provoz zaštiťuje spolek OpenAlt.