Fórum Ubuntu CZ/SK

Ubuntu pro osobní počítače => Obecná podpora => Téma založeno: karlitos 17 Března 2010, 11:43:43

Název: skript na konverzi ebooku : PDB -> epub
Přispěvatel: karlitos 17 Března 2010, 11:43:43
Zdravim

Mam sbirku knizek - je jich nekolik stovek -ve formatu PDB, s timto formatem si ale neporadi moje ctecka (Foxit eSlick). Zkousel jsem uz driv ruzne zpusoby konverze, ale pokazde mi to zmrsilo diakritiku. Kdyz jsem si jendu z tech knizek otevrel ve fbreaderu, zjistil jsem ze kodovani je windows-1250 - stredoevropske - jazyk cestina. Mam nainstalovany program calibre, dival jsem se do manualu (http://calibre-ebook.com/user_manual/cli/ebook-convert-7.html#pdb-input-to-epub-output) a nasel nakonec reseni :
Kód: [Vybrat]
ebook-convert /media/data/eBooks/knizka.PDB /home/karlitos/Desktop/test.epub --input-encoding windows-1250
No a svete div se, ale jak calibre ebok-viewer tak i fbreader po konverzi do .epub formatu ukazuji diakritiku v poradku. No a ted muj problem : tech knizek jsou stovky, jsou razeny stylem : ebooks/nazev_autora/tituly . Takze bych potreboval skript ktery by rekurzivne prosel cely adresar ebooks a u kazde knizky provedl konverzi podle vyse uvedeneho prikazu a vyslednou knizku ulozil do ebooks2/nazev_autora/titul
Neco jako
Kód: [Vybrat]
IF dalsi adresar existuje
FOR vsechny knizky v nem DO
ebook-convert cesta_k_titulu.pdb /media/data/ebook2/cesta_k_titulu_epub --input-encoding windows-1250

Snazim se snazim ale tohle proste v bashi nedam, tak moc prosim nekoho zkusenejsiho o pomoc.
diky K
Název: Re: skript na koverzi ebooku : PDB -> epub
Přispěvatel: stenliq 17 Března 2010, 12:14:22
Možná by se to dalo vyřešit jednoduše - použít find k nalezení knih a pustit na ně ten ebook-convert. Například (hrubý nástřel):

Kód: [Vybrat]
find *.pdb | while read file
do
  ebook-convert $file
done

Berte to opravdu jenom jako inspiraci, v BASHi jsem dělal před hodně dlouhou dobou :))
Název: Re: skript na konverzi ebooku : PDB -> epub
Přispěvatel: karlitos 17 Března 2010, 15:56:58
Tak trochu jsem googlil a myslim ze inspiraci by mohl byt tenhle prispevek (http://forum.mflenses.com/bash-recursive-file-rename-for-linux-nerds-t7077.html)
Kód: [Vybrat]
#!/bin/sh

convert_ebooks()
{
   for file in "$1"/*; do
      if [ -d "$file" ]; then
         convert_ebooks "$file"
      else
         dirname=`dirname "$file"`
         basename=`basename "$file"`

         singlename=${basename%.*}
        beg_name=${basename:0:4}
         extension=${basename##*.}

    # If extension is pdb
       if [[ "$extension" == "pdb" ]]; then
       ebook-convert $dirname/  .... ########

Tak a tady uz dal nevim ######

fi
   done
}

for dir in $@; do
   dirpath="$PWD/$dir"
   if [ -d "$dirpath" ]; then
      echo "Dir: $dirpath"
      rename_recursive "$dirpath"
   fi
done
Ale pevne verim ze i tohle je moc slozity zpusob a navic to stejne nedam dohromady. Takze moc prosim o zasah shora  ;)
Název: Re: skript na konverzi ebooku : PDB -> epub
Přispěvatel: MacHala 17 Března 2010, 17:31:04
@karlitos
to co psal stenliq je imho pro tve ucely uplne dostacujici - az teda na chybu toho findu, ma to byt  "find . -name '*.pdb'" (popr misto tecky / nebo ~)
Název: Re: skript na konverzi ebooku : PDB -> epub
Přispěvatel: karlitos 17 Března 2010, 18:53:25
No dobre a jak zajistim to aby se mi konvertovane knihy ulozily presne podle puvodni struktury jen do jineho adresare ? A aby to zkonvertovalo jen knihy v danem adresari ?
Název: Re: skript na konverzi ebooku : PDB -> epub
Přispěvatel: stenliq 18 Března 2010, 10:45:01
Kód: [Vybrat]
find . -name '*.pdb'
Ta tečka tam znamená prohledávaný (tečka znamená současný) adresář. Takže knihy pouze v jednom adresáři a jeho podstromu vyhledáte např. konkrétním zadáním
Kód: [Vybrat]
find /home/karlitos/knihy -name '*.pdb'.

Pokud chcete ukládat knihy do jiného adresáře se stejnou adresářovou strukturou, uděláte to zadáním jiného parametru tomu ebook-convertu.

Nevím přesně, který příkaz to dělá (někdo upřesněte :))), ale zjistíte si, kde se nachází daná .pdb kniha a například pomocí sedu upravíte cestu tak, aby se to celé ukládalo do jiného adresáře (např. ebook2 místo ebook). Pokud se nepletu, tak i find dokáže vypsat celou cestu k souboru, takže tím by se to dalo vyřešit.
Název: Re: skript na konverzi ebooku : PDB -> epub
Přispěvatel: karlitos 18 Března 2010, 12:09:05
Diky za vysvetleni. Opravdu mi to vyhodilo vetsinu titulu i s cestou. Nektere tituly ale maji vyjmecne i jine koncovky, treba pcr. SLo by to poresit nejakym OR operatorem ?
Kód: [Vybrat]
find . -name '*.pdb' OR '*.pcr' OR ... ?

Jinak syntaxe toho konvertoru je : ebook-convert cesta_k_titulu/kniha.pdb kam_se to_ma_ulozit/kniha.epub  --input-encoding windows-1250
No ale ja bych nerad aby mi to ty knizky davalo do stejneho hlavniho adresare ebooks, rad bych aby je to davalo pri zachovani struktury do adresare ebooks2. Aby to vzalo tu cestu k titulu a na zacatek pripojilo /media/data/ebooks2 a s koncovkou epub
Tohle mi treba vyhodi find :
Kód: [Vybrat]
./Lévi, E/Lévi_Éliphas-Klíč_k_velkým_tajemstvím.pdb
./Dickens, Ch/Dickens Charles-Oliver Twist.pdb
./Burroughs, ER/Burroughs_Edgar_Rice-6-Šílený_vědec_na Marsu.pdb
Jak z toho vytahnu JEN tu strukturu adresaru + jmeno ? tedy napriklad : Burroughs, ER/Burroughs_Edgar_Rice-6-Šílený_vědec_na Marsu Ten druhy argument ebook-convertoru podle sve koncovky (epub, pdf ...) urcuje totiz vystupni format.

Diky moc za rady K
Název: Re: skript na konverzi ebooku : PDB -> epub
Přispěvatel: stenliq 18 Března 2010, 14:30:28
S první částí vám mohu poradit hned:

Kód: [Vybrat]
find . -name '*.pdb' -o -name '*.pcr'
mělo by to fungovat hned.

Na tu další část se kouknu, až budu u nějaké linuxové mašiny...
Název: Re: skript na konverzi ebooku : PDB -> epub
Přispěvatel: karlitos 19 Března 2010, 21:57:20
Tak vyhledat soubory podle pripon - i vice neni problem, ale ten zbytek jsem stale nevyresil. Zkousel jsem i nejake jine skripty ktere jsem si nasel prez google, ale moje znalost bashe je bohuzel prilis slaba. Koukam ze skoro bude jednodussi to udelat prez javu nebo matlab - ty trochu ovladam , akorat i to prijde jako prasarna.
Název: Re:skript na konverzi ebooku : PDB -> epub
Přispěvatel: c4pp4 06 Července 2013, 11:56:42
Zkopíruj skript a ulož pod nějakým názvem:
Kód: [Vybrat]
#!/bin/bash
echo "Tento skript provádí v zadané složce rekurzivní převod souborů z formátu PDB, PRC nebo TXT do formátu EPUB."
if [ -z $1 ]; then echo "Nápověda: Jako parametr zadej název složky obsahující soubory určené pro převod. Pro zadání aktuální složky uveď jako parametr './'"; exit 0; fi
echo "Pozor! Po převodu dojde ke smazání souborů v původním formátu."
echo "Chceš zahájit převod? (1/2)"
select an in "Ano" "Ne"; do
    case $an in
        Ano )
                find "$1" -depth -name '*' | while read file; do
                    folder=$(dirname "$file")
                    sourcefile=$(basename "$file")
                    name=$(basename "${file%.[PpPpTt][DdRrXx][BbCcTt]}")
                    if [ "$sourcefile" != "$name" ]; then
                        echo "#######################################################################"
                        echo "Zahájen převod souboru $sourcefile"
                        echo "#######################################################################"
                        ebook-convert "$folder/$sourcefile" "$folder/$name.epub" --input-encoding windows-1250 --no-default-epub-cover </dev/null
                        rm "$folder/$sourcefile"
                    fi
                done;
                break;;
        Ne )
                echo "Převod byl zrušen."
                exit;;
    esac
done

Skript je třeba nastavit jako spustitelný pomocí:
Kód: [Vybrat]
chmod +x <název_skriptu>
Spouští se:
Kód: [Vybrat]
./<název_skriptu> <název_složky>
Pokud chcete projet aktuální složku, tak parametr názvu složky je:
Kód: [Vybrat]
./
Upozorňuji, že po konverzi se smažou původní soubory, takže je lepší si udělat zálohu.

Samozřejmě je předpoklad nainstalovaného Calibre:
Kód: [Vybrat]
sudo apt-get install --no-install-recommends calibre
Název: Re:skript na konverzi ebooku : PDB -> epub
Přispěvatel: pahel 06 Července 2013, 13:12:58
Zdravím,
 potřeboval bych taky poradit.Používám pro převod "*.pdb to *.txt"

Citace
txt2pdbdoc -d *.pdb  | iconv -f cp1250 -t utf8 > soubor.txt

ale jde mi o to, výstup je "soubor.txt" jak docílit aby se pojmenoval po vstupním souboru.
A ještě jedna otázka dalo by se toto vsunout do kotextového menu souboru v Dolphinoví? 

Díky
Název: Re:skript na konverzi ebooku : PDB -> epub
Přispěvatel: pacholik 07 Července 2013, 21:20:37
Kód: [Vybrat]
file="soubor.pdb"
txt2pdbdoc -d "$file" | iconv -f cp1250 -t utf8 > "${file%.pdb}.txt"

http://www.omgubuntu.co.uk/2011/11/making-dolphin-even-better-add-service-menus
http://flexible.xapient.net/?p=461
http://www.sharpley.org.uk/node/3
Název: Re:skript na konverzi ebooku : PDB -> epub
Přispěvatel: pahel 07 Července 2013, 22:32:26
to pacholik

Kód: [Vybrat]
file="soubor.pdb"
txt2pdbdoc -d "$file" | iconv -f cp1250 -t utf8 > "${file%.pdb}.txt"

tohle bohužel vůbec nefunguje :'(

výpis

Kód: [Vybrat]
pavel@pavel-mint ~/Share $ file="soubor.pdb"
pavel@pavel-mint ~/Share $ txt2pdbdoc -d "$file" | iconv -f cp1250 -t utf8 > "${file%.pdb}.txt"
txt2pdbdoc: can not open soubor.pdb for input


Název: Re:skript na konverzi ebooku : PDB -> epub
Přispěvatel: pacholik 08 Července 2013, 23:15:34
No tak tam asi místo soubor.pdb napiš soubor kterej chceš konvertovat. Nebo možná jsi chtěl
Kód: [Vybrat]
file=*.pdb
Název: Re:skript na konverzi ebooku : PDB -> epub
Přispěvatel: pahel 10 Července 2013, 00:58:18
to pacholik

Děkuji za tvou pomoc, už jsem dosáhl kýženého výsledku, složením mého a tvého příkazu

Kód: [Vybrat]
txt2pdbdoc -d *.pdb  | iconv -f cp1250 -t utf8 > "${file%.pdb}.txt"
Teď to funguje tak jak jsem si představoval, vezme jakýkoliv *.pdb načte jeho název překóduje
a převede do txt a hlavně pojmenuje po původním pdb.
Teď se budu snažit pochopit jak to dostat do toho kontextového menu.
Název: Re:skript na konverzi ebooku : PDB -> epub
Přispěvatel: pacholik 10 Července 2013, 20:20:27
To může správně pojmenovávat jenom pro jeden soubor, pro ten, kterej sis zapsal do proměnné $file. Správně by mělo být opravdu
Kód: [Vybrat]
file="*.pdb"
txt2pdbdoc -d "$file" | iconv -f cp1250 -t utf8 > "${file%.pdb}.txt