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: odladeni skriptu na prevod knih  (Přečteno 1720 krát)

Uran

  • Aktivní člen
  • *
  • Příspěvků: 341
odladeni skriptu na prevod knih
« kdy: 12 Října 2011, 09:45:27 »
Pouzivam e-link ctecku a resil jsem problem jaky zvolit system toho co chci precist. Zkousel jsem calibre, ale ten mi prisel prilis slozity. Nakonec jsem skoncil u kombinace symlinku jejich konverze pomoci unoconv v prostredi cli (bash, sed, rsync, ...).

V zasade mam slozku "/home/"$USER"/Knihy/Knihovna" ze ktere smeruji symlinky do "/home/"$USER"/Knihy/Precist/" nasledne konvertuji do takoveho "meziskladu" "/home/"$USER"/Knihy/Konverze/" a nasledne synchronizuji, pokud je pripojena, se cteckou.

Skript je funkcni (snad i nekomu poslouzi), ale asi neni moc efektivni. S bashem a gnu utils obecne zacinam tak budu vdecny za kazdou radu jak to monstrum zjednodusit, pripadne osetrit dalsi situace/problemy, ktere mi unikly.

Kód: [Vybrat]
#!/bin/bash
VSTUP="/home/"$USER"/Knihy/Precist/"
VYSTUP="/home/"$USER"/Knihy/Konverze/"
CYBOOK="/media/Cybook Gen3/eBooks"

find "$VYSTUP" -empty -exec rm {} \; # smaze prazdne adresare a soubory vznikle pri nekorektnim prevodu pomoci unoconv

find "$VSTUP" -type f -follow ! -iregex '.*\(doc\|docx\|rtf\|odt\)' | while read F #kopirovani souboru (mimo doc, docx, odt a rtf) do slozky "Konverze"
do if [ ! -e "`echo "$F" | sed 's#Precist#Konverze#'`" ]
then echo "Kopiruji "$F""
mkdir -p "`echo "${F%/*}" | sed 's#Precist#Konverze#'`" # nejak se mi nepovedlo pomoci cp vytvorit i prislusnou adresarovou strukturu tak to resim takto
cp "$F" "`echo "$F" | sed 's#Precist#Konverze#'`"
fi
done

find "$VSTUP" -type f -follow -iregex '.*\(doc\|docx\|rtf\|odt\)' | while read F
do if [ ! -e "`echo "${F%.*}.txt" | sed 's#Precist#Konverze#'`" ]
then echo "Konvertuji "$F""
mkdir -p "`echo "${F%/*}" | sed 's#Precist#Konverze#'`"
unoconv --stdout -f txt "$F" > "`echo "${F%.*}.txt" | sed 's#Precist#Konverze#'`" # konverze do txt vyuzivajici libreoffice
cstocs -i utf8 cp1250 "`echo "${F%.*}.txt" | sed 's#Precist#Konverze#'`" # konverze z utf8 do cp1250, ktere podporuje ctecka
fi
done

find  "$VYSTUP" -iname '*.txt' | while read F # Konverze zbylych TXT souboru z UTF-8 do CP1250, ktere podporuje ctecka.
do if [ "`file "$F" | grep -o -i utf-8`" ]
then echo "Konverze "$F" z UTF-8 do CP1250"
cstocs -i utf8 cp1250 "$F"
fi
done

if [ -d "/media/Cybook Gen3" ] # pokud je pripojena ctecka tak se provede synchronizace
then echo "Synchronizuji se cteckou"
find "$CYBOOK" -empty -exec rm {} \; # smaze prazdne adresare a soubory vznikle pri nekorektnim prevodu pomoci unoconv
rsync --stats -av --size-only --exclude="*.mbp" --exclude="*.param" --delete "$VYSTUP" "$CYBOOK" # synchronizace a mazani duplicit s vyjimkou *.mbp a *.param
else echo "Ctecka neni pripojena"
fi
"Pouze text v MS Wordu je opravdu čistý, příteli."

daysleeper

  • Stálý člen
  • **
  • Příspěvků: 1206
Re:odladeni skriptu na prevod knih
« Odpověď #1 kdy: 12 Října 2011, 10:56:17 »
Tak hlavně odsazování a obecně přehlednost
http://cs.wikipedia.org/wiki/Styl_z%C3%A1pisu_programu#Odsazov.C3.A1n.C3.AD

Jinak z mého pohledu drobnosti

místo -exec rm jde použít rovnou -delete
bash umí nahrazovat řetězce sám, není potřeba sed (pattern substitution, viz man bash)
použil bych víc proměnných, třeba pro echo "${F%.*}.txt" | sed 's#Precist#Konverze#'

Uran

  • Aktivní člen
  • *
  • Příspěvků: 341
Re:odladeni skriptu na prevod knih
« Odpověď #2 kdy: 12 Října 2011, 11:39:14 »
Tak hlavně odsazování a obecně přehlednost
http://cs.wikipedia.org/wiki/Styl_z%C3%A1pisu_programu#Odsazov.C3.A1n.C3.AD

Jinak z mého pohledu drobnosti

místo -exec rm jde použít rovnou -delete
bash umí nahrazovat řetězce sám, není potřeba sed (pattern substitution, viz man bash)
použil bych víc proměnných, třeba pro echo "${F%.*}.txt" | sed 's#Precist#Konverze#'

Ok dekuji ten parametr -delete jsem nejak prehlidl. Substituci v bashi nastuduji. :) Prehlednost na tom zapracuji.

Jinak nejsou v tom skriptu nejake neosetrene chyby/situace? Preruseni behem kopirovani/konverzi, chovani pri odpojeni ctecky behem synchronizace, ...?
"Pouze text v MS Wordu je opravdu čistý, příteli."

 

Provoz zaštiťuje spolek OpenAlt.