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
-
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.
-
#!/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.
-
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
-
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 -
*\
-
jj, sed 's/puvodni/novy/'
$ echo abcdef | sed 's/ab/xy/'
xycdef
http://www.abclinuxu.cz/clanky/navody/unixove-nastroje-9-sed-nahrazovani-textu