qualle schrieb:
Um es mal zu testen, muss nur der Pfad in Zeile 2 angepasst werden. (Und alle Dateinamen müssen vorher ein passendes Präfix haben...)
Mangels Powershell (nur Windows XP Home per VM vorhanden) kann ich es nicht testen. Ich würde das Verzeichnis aber nicht fest "verdrahten", sondern es einfach im aktuellen Verzeichnis ausführen lassen.
Vorstellbar wäre auch, die umzubenennenden Dateien per Mehrfachauswahl zu selektieren und dann auf's Skript zu ziehen, oder per RMB/Öffnen mit …, wenn du einen Starmenü-Eintrag dafür hast. -
Zumindest theoretisch: Damit habe ich noch nicht experimentieren.
Dann würde vermutlich auch das mit der Sortierung im Dateimanager (nach Name, Größe, Datum) funktionieren.
qualle schrieb:
Das entsprechende bash-Pendant sollte auch sehr ähnlich zu diesem Script sein.
Falls du die Unterhaltung noch hast, lasse es dir doch bitte auch noch für bash erstellen: Nach meinen Erfahrungen *) sind Powershell-Skripte komplexer als die Bash-Version.
*) da ich in bash-Programmierung nicht sonderlich geübt bin, lasse ich mich auch gerne von einer KI (Opera, Google, oder beide zum Vergleich) helfen und gelegentlich auch zeigen, wie das bei Windows aussehen würde.
Der Witz daran: Als ich das erste Mal nach einem Windows-Pendant gefragt habe, meinte die Opera-KI: Per Powershell wäre das zu umständlich, man sollte bei Windows besser das Bash-Skript per WSL2 nutzen. - Damit hatte ich überhaupt nicht gerechnet! - Das war aber auch nur dieses eine Mal.
Ich habe es mir dann trotzdem erstellen lassen und konnte der KI nur zustimmen.
Es ging darum, alle meine ePub (Perry Rhodan seit 2010 als eBook, vorher seit 1983 als tote Bäume) in einem Rutsch in reine Textdateien zu konvertieren, um bei Bedarf eine Volltext-Suche über alle laufen zu lassen.
Da ePubs praktisch nur umbenannte ZIP-Archive sind und normale HTML-Dateien enthalten (eine pro Kapitel), wäre das zwar rel. trivial. Nur es ging eben um 700 Bände, die in einem Rutsch in je eine Textdatei/Bande mit dessen Namen konvertiert werden sollten: Nach
for n in *.epub wusste ich nicht mehr weiter.
Nachtrag:
Ich hatte noch die Mail, in der ich das einem Bekannten erklärt habe:
Bash:
for n in *.epub;do 7z x "$n" -oeBooks/"${n%.epub}"/ > /dev/null;done && find eBooks/ -iname "nav.*html" -delete
for n in eBooks/*;do d=$(find "$n" -iname "*.*html" -exec dirname {} \; | grep -vi bookwire | sort -u | head -n 1);w3m -cols 999999999 "$d/"*.*html > "$n.txt";done
mkdir -p Text && mv eBooks/*.txt Text/ && rm -rf eBooks
1. entpackt die ePubs unter ihren Namen ("${n%.epub}" entfernt das ".epub", " > /dev/null" unterdrückt die Ausgabe) im automatisch erstellten Unterverzeichnis "eBooks" und entfernt anschließend die Inhaltsverzeichnisse
2. konvertiert die gefundenen *.*html, mit Ausnahme von "bookwire" (Werbung), in die jeweiligen Textdateien im "eBooks"-Verzeichnis
3. die dann ins neu erstellte "Text"-Verzeichnis verschoben werden und anschließend das "eBooks"-Verzeichnis löscht
- "sort -u" sortiert die Pfade der Treffer eines eBooks (= zu jeder enthaltenen *.*html Datei) und entfernt doppeltes
- "head -n 1" übergibt nur den ersten Pfad, da w3m alle *.*html Datei in einer Textdatei zusammenfasst
- "-cols 999999999" ist sozusagen unendliche Zeilenlänge: Normalerweise umbricht w3m nach 80 Zeichen, ich bevorzuge aber Fießtext.
Die ePubs müssen dazu in ein leeres Verzeichnis kopiert werden, in dem dann das Terminal geöffnet wird.
Und das ist das dokumentierte, vereinfachte (nur noch eine Schleife und mit Statusausgabe) Skript, wie ich es zuletzt überarbeitet hatte:
Bash:
#!/bin/bash
mkdir -p Text || exit # falls das Zielverzeichnis nicht erstellt werden kann
# Alle "*.epub" im aktuellen Verzeichnis ins automatisch erstellte Verzeichnis "temp" entpacken,
# deren Inhaltsverzeichnisse löschen und die restlichen HTML-Dateien außer "bookwire" (Werbung)
# in eine Textdatei pro Band in den Ordner "Text" konvertieren:
for n in *.epub
do t=${n%.epub};echo $t
7z x "$n" -otemp/"$t"/ > /dev/null
find temp/"$t" -iname "nav.*html" -delete
d=$(find temp/"$t" -iname "*.*html" -exec dirname {} \; | grep -vi bookwire | sort -u | head -n 1)
w3m -cols 999999999 "$d/"*.*html > "Text/$t.txt"
done && rm -rf temp