Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
-
Mel
- Beiträge: 40
- Registriert: 28.09.2004 20:39:45
- Wohnort: Bonn
-
Kontaktdaten:
Beitrag
von Mel » 15.04.2005 17:31:27
Hallo Leute,
ich habe eine Menge Dateien, die ich alle derselben Prozedur unterziehen möchte. Die Dateinamen sehen alle so aus:
"Vorname Nachname - Das ist der Titel.txt"
Ausgeführt werden soll dann der folgende Befehl:
Code: Alles auswählen
makelrf -a "Vorname Nachname" -t "Das ist der Titel" -o Vorname\ Nachname\ \-\ Das\ ist\ der\ Titel.lrf Vorname\ Nachname\ \-\ Das\ ist\ der\ Titel.txt
Ein Beispiel:
Code: Alles auswählen
makelrf -a "William Shakespeare" -t "Romeo und Julia" -o William\ Shakespeare\ \-\ Romeo\ und\ Julia.lrf William\ Shakespeare\ \-\ Romeo\ und\ Julia.txt
Ich müsste also den String "V N - D i d T" am " - " aufsplitten und jeweils beide Teile in Variablen speichern. Wie kann ich das am geschicktesten machen? Eigentlich sollte es nicht besonders schwer sein, nur stehe ich irgendwie auf dem Schlauch...
Dank und Gruss,
Mel.
-
Joghurt
- Beiträge: 5244
- Registriert: 30.01.2003 15:27:31
- Wohnort: Hamburg
-
Kontaktdaten:
Beitrag
von Joghurt » 15.04.2005 17:47:49
bash-Syntax!
Code: Alles auswählen
$ A="Alan Smithee - Foobar and his daugther"
$ echo ${A#* - }
Foobar and his daugher
$ echo ${A% - *}
Alan Smithee
-
godsmacker
- Beiträge: 902
- Registriert: 16.03.2003 21:50:26
- Lizenz eigener Beiträge: Artistic Lizenz
- Wohnort: Chemnitz
-
Kontaktdaten:
Beitrag
von godsmacker » 15.04.2005 17:52:24
Joghurt hat geschrieben:bash-Syntax!
Code: Alles auswählen
$ A="Alan Smithee - Foobar and his daugther"
$ echo ${A#* - }
Foobar and his daugher
$ echo ${A% - *}
Alan Smithee
Impliziert allerdings, dass sonst keine Bindestringe vorkommen.
-
Mel
- Beiträge: 40
- Registriert: 28.09.2004 20:39:45
- Wohnort: Bonn
-
Kontaktdaten:
Beitrag
von Mel » 15.04.2005 17:56:25
godsmacker hat geschrieben:
Impliziert allerdings, dass sonst keine Bindestringe vorkommen.
Daran hatte ich selbst noch nicht gedacht - es gibt tatsächlich Dateien, in denen mehrere "-" vorkommen. Ich müsste am jeweils ersten splitten, so dass in der zweiten Variablen dann etwas wie "Romeo und Julia - Englisch" stehen sollte....
-
meandtheshell
- Beiträge: 4054
- Registriert: 14.01.2005 17:51:30
Beitrag
von meandtheshell » 15.04.2005 17:58:05
@ godsmacker
Die Dateinamen sehen alle so aus:
"Vorname Nachname - Das ist der Titel.txt"
so ist es spezifiziert - also ist das was jog. vorgeschlagen hat in ordnung
-
Joghurt
- Beiträge: 5244
- Registriert: 30.01.2003 15:27:31
- Wohnort: Hamburg
-
Kontaktdaten:
Beitrag
von Joghurt » 15.04.2005 18:16:07
-
Mel
- Beiträge: 40
- Registriert: 28.09.2004 20:39:45
- Wohnort: Bonn
-
Kontaktdaten:
Beitrag
von Mel » 15.04.2005 18:29:49
Danke schon einmal für Eure Hilfe! Ich weiss immernoch nicht ganz, wie ich es anstellen soll:
Code: Alles auswählen
for i in `ls William\ Shakespeare\ \-\ Romeo\ und\ Julia.txt`; do TITEL=${i#* - };AUTOR=${i% - $TITEL};echo TITEL $TITEL;echo AUTOR $AUTOR;done;
TITEL William
AUTOR William
TITEL Shakespeare
AUTOR Shakespeare
TITEL -
AUTOR -
TITEL Romeo
AUTOR Romeo
TITEL und
AUTOR und
TITEL Julia.txt
AUTOR Julia.txt
Die for-Schleife escapet die Leerzeichen nicht. Besser wäre sicher find, aber ich weiss nicht genau, wie ich Variablen in den find Befehl einbauen kann.
Ausserdem habe ich immernoch das Problem, dass in $TITEL am Ende noch das ".txt" weggeschnitten werden müsste...
Gruss und Dank,
Mel.
-
Joghurt
- Beiträge: 5244
- Registriert: 30.01.2003 15:27:31
- Wohnort: Hamburg
-
Kontaktdaten:
Beitrag
von Joghurt » 15.04.2005 18:43:26
Die eleganteste Möglichkeit ist es, read zu verwenden (die andere möglichkeit wäre
gewesen)
Code: Alles auswählen
ls | while read FILENAME; do
TITEL=...
AUTOR=...
#.txt abschneiden
TITEL=${TITEL%.txt}
...
done
-
Mel
- Beiträge: 40
- Registriert: 28.09.2004 20:39:45
- Wohnort: Bonn
-
Kontaktdaten:
Beitrag
von Mel » 15.04.2005 21:19:48
Tausend Dank, es funktioniert!
Code: Alles auswählen
ls|while read FILENAME;
do TITEL=${FILENAME#* - };AUTOR=${FILENAME% - $TITEL};TITEL=${TITEL%.txt};
makelrf -x "/home/mel/librie/makelrf3/info.xml" -a " $AUTOR " -t " $TITEL " -o "$AUTOR - $TITEL".lrf "$FILENAME";
done;
Aber es ist schon gut, zu wissen, dass es meist an einem selbst liegt, wenn man nicht vorwärtskommt
Gruss,
Mel.