Preview
Link Preview
MacTechNews.de
iBooks ade - wie von iBooks zu Calibre oder anderem ePub Programm
Bei dieser Newsmeldung (🔗) Anfang dieses Jahres, hatte ich kurz meine Erfahrung zu iBooks geschrieben.Eigentlich fand ich iBooks erträglich, abgesehen von der schlechten Meta Daten Bearbeitung war es ausreichend. Es diente aber auch nur als Sync Applikation zwischen meinem iPad und iPhone und der Library.Aber als ich dann auf Calibre umsteigen wollte wegen deren Server Funktionalität und auch den Sync Möglichkeiten war ich geschockt:Hier nochmal mein Kommentar:"Ein bisschen Off Topic es geht mehr um iBooks am Mac:Diese Applikation ist zwar nett zum lesen von eBooks aber zum reinen Verwalten von ePubs ist diese sehr gefährlich wenn man sich nicht vorsieht. Bevor es iBooks gab hatte ich schon alle ePubs in iTunes 10, war auch kein Problem mit dem Syncronisieren oder mal ein ePub aus der Library kopieren woanders hin etc. Dann wurde automatisch zu iBooks gewechselt mit Mavericks und alle ePubs wurden migriert und entpackt. Das ist mir erst vor knapp einem Monat wirklich aufgefallen und auch was die Folgen sind. Leider war ich ohne Backup. Sobald man also ein ePub in iBooks importiert wird es von iBooks entpackt (ePubs sind nur zip Dateien). Die Endung bleibt erhalten. Im Finder wird es immer noch als ePub angezeigt aber ich kann dieses ePub nicht mehr mit z.B. Calibre öffnen, da es ja nur noch ein Ordner ist. (ein ls -a im Terminal zeigt auch ein d für directory)Ziemlich ärgerlich wenn man mal auf die Idee kommt ein anderes Tool als iBooks zu benutzen.Ich hab dann ein Bash script geschrieben, damit alle ePubs wieder richtig gezippt werden sowie die Namen aus den Metadaten ausgelesen damit der Dateiname anders ist als 213489701234klöafsd.ePub.Es gibt bestimmt noch andere Anwendungen wo solche teilweise überaus ärgerlichen und fast unverschämte Probleme auftreten. Was sich Apple dabei gedacht hat, bzw. die Projektmanager und die Entwickler kann ich mir nicht erklären - außer abhängigkeit zu schaffen. Traurig. Werde bei Zeiten das Script zur Verfügung stellen falls es anderen ähnlich geht wie mir."Nachdem jetzt einige Zeit vergangen ist traue ich mich ein Skript zur freien Verfügung zu stellen. Ich übernehme keine Garantie aber hier bei mir läuft es ohne Probleme.Vielleicht hilft es dem ein oder anderen ja weiter.#!/bin/bash function describe { echo "#########################################################" echo Usage: $0 {1 2} echo Usage: $0 {Exportfolder debug-log} echo Usage: example $0 {$HOME/Documents/Exportfolder $HOME/Destktop/$0/debug.log} echo " " echo This script will read the iTunes books from $STARTFOLDER echo "#########################################################" }START_temp=$HOME/Library/Containers/com.apple.BKAgentService STARTFOLDER=$START_temp/Data/Documents/iBooks/Books if [ -z "$1" ] || [ ! -d "$1" ]; then echo >&2 "Error: You must supply the first argument as a directory!" describe exit 1elif [ -z "$2" ] || [ -d "$2" ]; then echo >&2 "Error: You must supply the second argument as a filename, not directory!" describe exit 1fiEXPFOLDER=$1DEBUGLOG=$2TEMPDIR=$EXPFOLDER/tmp/ && mkdir -p $TEMPDIR# ************************************************************ ****# get file list of existing books/files in the startfolder for debugging only# ************************************************************ ****cd $STARTFOLDERFILES="`find . -type d -maxdepth 1`" #$FILES is only for debuggingecho "Starting the program $0:" && echo "Starting the program $0 at `date`" > $DEBUGLOG # second part only for debuggingecho "Following files found:" >> $DEBUGLOG # only for debuggingecho $FILES >> $DEBUGLOG # only for debugging # ************************************************************ ******************************# exclude the root dir and ds store file in the start folder# for each book (actually folder in iTunes) process the following steps# - remove iTunesMetadata# - get the title of the book from the opf file# - add mimetype file to epub zip# - add iTunesArtwork file to epub zip# - add META-INF folder to epub zip# - add all other files to epub zip# ************************************************************ ******************************for f in ./* docd $STARTFOLDERif [ "$f" == "." ] || [ "$f" == ".." ] || [ "$f" == "./.DS_Store" ] || [ ! -d "$f" ] then continuefi cp -r "$f" "$TEMPDIR/" cd "$TEMPDIR/$f"echo "Working now in following folder:" >> $DEBUGLOG # - only for debugging echo "$f" >> $DEBUGLOG # - only for debugging # ****************************************# remove iTunesMetadata# **************************************** rm -rf iTunesMetadata*# ************************************************# get the title of the book from the opf file# ************************************************ value=`find . -type f -name "*.opf" -exec cat {} \;` title=$( sed -n 's/.*<dc:title.*>\([^<]*\)<\/dc:title>.*/\1/p' <<< $value ) title=$( echo $title | cut -c 1-93 ) title=$( echo ${title/:/ } ) title=$( echo ${title/\//_} ) title=$( echo ${title/&/&} )echo "The following book title was generated:" >> $DEBUGLOG # - only for debugging echo "$title" >> $DEBUGLOG # - only for debugging # ****************************************# add mimetype file to epub zip# ****************************************if [ -f ./mimetype ]thenecho "Add mimetypes to book $title" >> $DEBUGLOG # - only for debugging zip -X0 "$EXPFOLDER/$title.epub" "mimetype" >> $DEBUGLOG rm -rf mimetype rm -rf ./.DS_Storeelse echo the file "mimetype" does not exist, without that file you will not have a valid epub file exit 1fi# ****************************************# add iTunesArtwork file to epub zip# ****************************************if [ -f ./iTunesArtwork ]then cp ./iTunesArtwork ./cover.pngecho "Add iTunesArtwork to book $title" >> $DEBUGLOG # - only for debugging zip -Xr "$EXPFOLDER/$title.epub" "iTunesArtwork" "cover.png" >> $DEBUGLOG rm -rf ./iTunesArtwork rm -rf ./cover.pngfi# ****************************************# add META-INF folder to epub zip# ****************************************if [ -d ./META-INF ]then cc="${PWD##*/}" echo "Add META-INF to book $title" >> $DEBUGLOG # - only for debugging zip -Xr "$EXPFOLDER/$title.epub" "META-INF" >> $DEBUGLOG rm -rf ./META-INFfi# ****************************************# add all other files to epub zip# ****************************************cc="${PWD##*/}"FILESINDIR="./*"for g in $FILESINDIRdoecho "Add rest of the files to book $title" >> $DEBUGLOG # - only for debugging zip -Xr "$EXPFOLDER/$title.epub" "$g" >> $DEBUGLOGdonedone# ****************************************# rename .ibooks into .epub files# ****************************************string='.ibooks'cd "$EXPFOLDER"for h in ./* doif [[ $h == *$string* ]]then for h in * ; do mv "$h" "${h//.ibooks/.epub}" ; donefidone# ****************************************# Remove temporary work directory# ****************************************echo "Remove temporary directory" >> $DEBUGLOGrm -rf $TEMPDIR echo "finished" && echo "Finished at `date`" >> $DEBUGLOGecho "Please find the following files in $EXPFOLDER" echo " "echo `ls -a $EXPFOLDER`echo "Please find the log file here: $DEBUGLOG" exit 0Um es zu starten muss folgendes getan werden:- kopiere den Inhalt des Codes in eine Datei, am besten mit einem Editor oder auch Textedit.- Speichere die Datei mit einem beliebigen Namen (hier heißt es runEpub.sh)- erstelle einen leeren Ordner in dem die konvertierten Dateien landen sollen- öffne das Terminal- navigiere in den Ordner wo dieses Skript liegt ("cd OrdnerName" zum Ordner wechseln, "ls" zum Anschauen welche Ordner verfügbar sind, "pwd" um zu schauen wo man sich gerade auf der Festplatte befindet)- Führe das Skript dann z.B. so aus:bash runEpub.sh $HOME/Desktop/export $HOME/Desktop/runEpub.log- bash ist der Befehl mit dem ich das Skript starte- dann kommt der Name des Skripts- dann der ganze Pfad zu dem erstellten Export Ordner ($HOME steht für das User Verzeichnis des aktuellen Users)- dann der ganze Pfad in dem eine log Datei erstellt werden soll In der Log Datei sieht man dann grob was gemacht wurde.Die originalen Dateien werden nicht verändert.
Bei dieser Newsmeldung (🔗) Anfang dieses Jahres, hatte ich kurz meine Erfahrung zu iBooks geschrieben.Eigentlich fand ich iBooks erträglich, abgesehen von der schlechten Meta Daten Bearbeitung war es ausreichend. Es diente aber auch nur als Sync Applikation zwischen meinem iPad und iPhone und der Library.Aber als ich dann auf Calibre umsteigen wollte wegen deren Server Funktionalität und auch den Sync Möglichkeiten war ich geschockt:Hier nochmal mein Kommentar:"Ein bisschen Off Topic es geht mehr um iBooks am Mac:Diese Applikation ist zwar nett zum lesen von eBooks aber zum reinen Verwalten von ePubs ist diese sehr gefährlich wenn man sich nicht vorsieht. Bevor es iBooks gab hatte ich schon alle ePubs in iTunes 10, war auch kein Problem mit dem Syncronisieren oder mal ein ePub aus der Library kopieren woanders hin etc. Dann wurde automatisch zu iBooks gewechselt mit Mavericks und alle ePubs wurden migriert und entpackt. Das ist mir erst vor knapp einem Monat wirklich aufgefallen und auch was die Folgen sind. Leider war ich ohne Backup. Sobald man also ein ePub in iBooks importiert wird es von iBooks entpackt (ePubs sind nur zip Dateien). Die Endung bleibt erhalten. Im Finder wird es immer noch als ePub angezeigt aber ich kann dieses ePub nicht mehr mit z.B. Calibre öffnen, da es ja nur noch ein Ordner ist. (ein ls -a im Terminal zeigt auch ein d für directory)Ziemlich ärgerlich wenn man mal auf die Idee kommt ein anderes Tool als iBooks zu benutzen.Ich hab dann ein Bash script geschrieben, damit alle ePubs wieder richtig gezippt werden sowie die Namen aus den Metadaten ausgelesen damit der Dateiname anders ist als 213489701234klöafsd.ePub.Es gibt bestimmt noch andere Anwendungen wo solche teilweise überaus ärgerlichen und fast unverschämte Probleme auftreten. Was sich Apple dabei gedacht hat, bzw. die Projektmanager und die Entwickler kann ich mir nicht erklären - außer abhängigkeit zu schaffen. Traurig. Werde bei Zeiten das Script zur Verfügung stellen falls es anderen ähnlich geht wie mir."Nachdem jetzt einige Zeit vergangen ist traue ich mich ein Skript zur freien Verfügung zu stellen. Ich übernehme keine Garantie aber hier bei mir läuft es ohne Probleme.Vielleicht hilft es dem ein oder anderen ja weiter.#!/bin/bash function describe { echo "#########################################################" echo Usage: $0 {1 2} echo Usage: $0 {Exportfolder debug-log} echo Usage: example $0 {$HOME/Documents/Exportfolder $HOME/Destktop/$0/debug.log} echo " " echo This script will read the iTunes books from $STARTFOLDER echo "#########################################################" }START_temp=$HOME/Library/Containers/com.apple.BKAgentService STARTFOLDER=$START_temp/Data/Documents/iBooks/Books if [ -z "$1" ] || [ ! -d "$1" ]; then echo >&2 "Error: You must supply the first argument as a directory!" describe exit 1elif [ -z "$2" ] || [ -d "$2" ]; then echo >&2 "Error: You must supply the second argument as a filename, not directory!" describe exit 1fiEXPFOLDER=$1DEBUGLOG=$2TEMPDIR=$EXPFOLDER/tmp/ && mkdir -p $TEMPDIR# ************************************************************ ****# get file list of existing books/files in the startfolder for debugging only# ************************************************************ ****cd $STARTFOLDERFILES="`find . -type d -maxdepth 1`" #$FILES is only for debuggingecho "Starting the program $0:" && echo "Starting the program $0 at `date`" > $DEBUGLOG # second part only for debuggingecho "Following files found:" >> $DEBUGLOG # only for debuggingecho $FILES >> $DEBUGLOG # only for debugging # ************************************************************ ******************************# exclude the root dir and ds store file in the start folder# for each book (actually folder in iTunes) process the following steps# - remove iTunesMetadata# - get the title of the book from the opf file# - add mimetype file to epub zip# - add iTunesArtwork file to epub zip# - add META-INF folder to epub zip# - add all other files to epub zip# ************************************************************ ******************************for f in ./* docd $STARTFOLDERif [ "$f" == "." ] || [ "$f" == ".." ] || [ "$f" == "./.DS_Store" ] || [ ! -d "$f" ] then continuefi cp -r "$f" "$TEMPDIR/" cd "$TEMPDIR/$f"echo "Working now in following folder:" >> $DEBUGLOG # - only for debugging echo "$f" >> $DEBUGLOG # - only for debugging # ****************************************# remove iTunesMetadata# **************************************** rm -rf iTunesMetadata*# ************************************************# get the title of the book from the opf file# ************************************************ value=`find . -type f -name "*.opf" -exec cat {} \;` title=$( sed -n 's/.*<dc:title.*>\([^<]*\)<\/dc:title>.*/\1/p' <<< $value ) title=$( echo $title | cut -c 1-93 ) title=$( echo ${title/:/ } ) title=$( echo ${title/\//_} ) title=$( echo ${title/&/&} )echo "The following book title was generated:" >> $DEBUGLOG # - only for debugging echo "$title" >> $DEBUGLOG # - only for debugging # ****************************************# add mimetype file to epub zip# ****************************************if [ -f ./mimetype ]thenecho "Add mimetypes to book $title" >> $DEBUGLOG # - only for debugging zip -X0 "$EXPFOLDER/$title.epub" "mimetype" >> $DEBUGLOG rm -rf mimetype rm -rf ./.DS_Storeelse echo the file "mimetype" does not exist, without that file you will not have a valid epub file exit 1fi# ****************************************# add iTunesArtwork file to epub zip# ****************************************if [ -f ./iTunesArtwork ]then cp ./iTunesArtwork ./cover.pngecho "Add iTunesArtwork to book $title" >> $DEBUGLOG # - only for debugging zip -Xr "$EXPFOLDER/$title.epub" "iTunesArtwork" "cover.png" >> $DEBUGLOG rm -rf ./iTunesArtwork rm -rf ./cover.pngfi# ****************************************# add META-INF folder to epub zip# ****************************************if [ -d ./META-INF ]then cc="${PWD##*/}" echo "Add META-INF to book $title" >> $DEBUGLOG # - only for debugging zip -Xr "$EXPFOLDER/$title.epub" "META-INF" >> $DEBUGLOG rm -rf ./META-INFfi# ****************************************# add all other files to epub zip# ****************************************cc="${PWD##*/}"FILESINDIR="./*"for g in $FILESINDIRdoecho "Add rest of the files to book $title" >> $DEBUGLOG # - only for debugging zip -Xr "$EXPFOLDER/$title.epub" "$g" >> $DEBUGLOGdonedone# ****************************************# rename .ibooks into .epub files# ****************************************string='.ibooks'cd "$EXPFOLDER"for h in ./* doif [[ $h == *$string* ]]then for h in * ; do mv "$h" "${h//.ibooks/.epub}" ; donefidone# ****************************************# Remove temporary work directory# ****************************************echo "Remove temporary directory" >> $DEBUGLOGrm -rf $TEMPDIR echo "finished" && echo "Finished at `date`" >> $DEBUGLOGecho "Please find the following files in $EXPFOLDER" echo " "echo `ls -a $EXPFOLDER`echo "Please find the log file here: $DEBUGLOG" exit 0Um es zu starten muss folgendes getan werden:- kopiere den Inhalt des Codes in eine Datei, am besten mit einem Editor oder auch Textedit.- Speichere die Datei mit einem beliebigen Namen (hier heißt es runEpub.sh)- erstelle einen leeren Ordner in dem die konvertierten Dateien landen sollen- öffne das Terminal- navigiere in den Ordner wo dieses Skript liegt ("cd OrdnerName" zum Ordner wechseln, "ls" zum Anschauen welche Ordner verfügbar sind, "pwd" um zu schauen wo man sich gerade auf der Festplatte befindet)- Führe das Skript dann z.B. so aus:bash runEpub.sh $HOME/Desktop/export $HOME/Desktop/runEpub.log- bash ist der Befehl mit dem ich das Skript starte- dann kommt der Name des Skripts- dann der ganze Pfad zu dem erstellten Export Ordner ($HOME steht für das User Verzeichnis des aktuellen Users)- dann der ganze Pfad in dem eine log Datei erstellt werden soll In der Log Datei sieht man dann grob was gemacht wurde.Die originalen Dateien werden nicht verändert.

Issue #8
Code pre formatting lost
- Accepted by admin
- Type of issue
- IV page is missing essential content
- Reported
- Mar 5, 2019