Autor |
Nachricht |
|
Titel: toolame oggdec; leerzeichen parameter shell
Verfasst am: 25.06.2006, 10:44 Uhr
|
|

Anmeldung: 09. Apr 2005
Beiträge: 203
|
|
mein 1. Versuch mit sed hakt vielleicht doch nur an toolame:
meine ogg-Dateien werden im aktuellen Verzeichnis so in wav umgewandelt:
find -type f|sed -e 's/['.']['/']//' -e 's/Joss/"&/g' -e 's/ogg/&"/g'|xargs oggdec
(Nicht auf die Détails in sed achten. Damit setz ich die Dateinamen nur in Doublequotes, weil sie Leerzeichen enthalten und die fangen halt alle mit 'Joss' an.)
soweit so gut. um die wav-dateien jetzt in mp3 umzuwandeln, hab ich es so versucht:
find -type f|grep wav|sed -e 's/['.']['/']//' -e 's/Joss/"&/g' -e 's/wav/&"/g'|toolame
Da antwortet mir toolame mit "USAGE usw."
Soweit ersichtlich hab ich auch alle Varianten mit xargs oder xargs -0 vor toolame durch, egal, ob ich wav mit grep oder mit find *wav rausfiltere.
Bei diesen Varianten meldet toolame "excess arg". Für Exzesse hab ich ja grds eine Schwäche.
Aber hilft mir hier einer? |
_________________ unsensibel, aber empfindlich
|
|
|
|
 |
|
Titel: toolame oggdec; leerzeichen parameter shell
Verfasst am: 25.06.2006, 11:17 Uhr
|
|
Team Member


Anmeldung: 02. Jan 2005
Beiträge: 906
Wohnort: Hagen
|
|
Ich würde eine einfache for-schleife machen. |
|
|
|
|
 |
|
Titel: RE: toolame oggdec; leerzeichen parameter shell
Verfasst am: 25.06.2006, 12:31 Uhr
|
|

Anmeldung: 09. Apr 2005
Beiträge: 203
|
|
danke für die prompte antwort. damit hatte ich erstmal angefangen. hab das ergebnis von find und sed in ne variable eingelesen und über die die for-schleife laufen lassen. toolame $datei in der schleife führte aber zum gleichen ergebnis, obwohl zwei echos sowohl die liste als auch den dateinamen richtig ausgegeben haben.
beim versuch, find an ein array zu übergeben, bin ich trotz D i c k e m shell-buch wohl an der syntax gescheitert. |
_________________ unsensibel, aber empfindlich
|
|
|
|
 |
|
Titel: RE: toolame oggdec; leerzeichen parameter shell
Verfasst am: 25.06.2006, 13:53 Uhr
|
|
Team Member


Anmeldung: 02. Jan 2005
Beiträge: 906
Wohnort: Hagen
|
|
|
|
 |
|
Titel:
Verfasst am: 26.06.2006, 08:16 Uhr
|
|

Anmeldung: 09. Apr 2005
Beiträge: 203
|
|
Schon klar. Das ist auch der Weisheit letzter Schluß.
**censored** bekomme ich sonst auf 64bit nicht hin. Und meine CDs habe ich zum großen Teil als ogg auf der Platte. Hab nix gefunden, was direkt von ogg nach mp3 konvertiert. Der Player im neuen Auto von Weibi kann entgegen meinem Auftrag aber doch nur mp3 spielen. Keine Lust mit dem Autohaus zu streiten, weil ich schon hauptberuflich streite.
Außerdem wollte ich endlich mal was mit der Shell machen außer an fertigen Skripten rumzufummeln. ( Deinen Link kannte ich schon. Hab natürlich vorher das Forum durchwühlt.) |
_________________ unsensibel, aber empfindlich
|
|
|
|
 |
|
Titel: Bitte nochmal:
Verfasst am: 29.06.2006, 21:55 Uhr
|
|

Anmeldung: 09. Apr 2005
Beiträge: 203
|
|
Jetzt hab ich es mit Variablen und Pipes direkt aufgegeben.
Mit
ls -1Q>>dirliste
hab ich erstmal alle Dateinamen in Anführungszeichen zeilenweise in dirliste.
Mache ich dann
while read i
do
oggdec $i
done < dirliste
beklagt sich oggdec, daß es die Datei nicht findet.
Mache ich in der while-schleife statt oggdec echo, wird brav zeilenweise in Anführungszeichen ausgegeben.
Daß oggdec * im CWD brav seine Arbeit versieht, bringt mich nicht weiter. Dann lern ich das ja nie  |
_________________ unsensibel, aber empfindlich
|
|
|
|
 |
|
Titel: Bitte nochmal:
Verfasst am: 29.06.2006, 21:56 Uhr
|
|
Anmeldung: 17. Dez 2003
Beiträge: 16792
|
|
toolame ist kein mp3, das ist mpeg 1 layer 2 und nicht 3. |
|
|
|
|
 |
|
Titel:
Verfasst am: 09.07.2006, 07:40 Uhr
|
|

Anmeldung: 09. Apr 2005
Beiträge: 203
|
|
stimmt schon. Weil es aber problemlos abgespielt wird, ist mir das egal.
Das mit den Leerzeichen hab ich zwischenzeitlich mit Python erledigt. Ist eh hübscher. |
_________________ unsensibel, aber empfindlich
|
|
|
|
 |
|
Titel:
Verfasst am: 09.07.2006, 12:52 Uhr
|
|
Anmeldung: 09. Jan 2006
Beiträge: 1720
|
|
problem von tolame es kann Leehrzeichen nicht richtig verarbeiten, vor allem wenn sie per Pipe übergeben werden.
wandle alle filenamen mit leerzeichen in solche mit '_'.
ine einer Schleife:
for $datei
do
tolame $datei -weitere_parameter -parameter
shift $datei
done |
|
|
|
|
 |
|
Titel:
Verfasst am: 09.07.2006, 15:44 Uhr
|
|
Anmeldung: 17. Dez 2003
Beiträge: 16792
|
|
Man kann sich auch mit dem Fuss am Kopf kratzen, wenn man will
toolame erstellt mp2, ergo - direkt ohne wav:
for x in *.ogg; do ogg123 "$x" -dwav -f-|toolame - "$(echo $x|sed s/ogg/mp2/)" ; done
Wer aus was für Gründen auch immer mit nem wav Zwischenfile arbeiten will:
for x in *.ogg; do oggdec "$x"; toolame "$(echo $x|sed s/ogg/wav/)" "$(echo $x|sed s/ogg/mp2/)" ; done |
|
|
|
|
 |
|
Titel:
Verfasst am: 09.07.2006, 15:47 Uhr
|
|

Anmeldung: 09. Apr 2005
Beiträge: 203
|
|
Danke Schnorrer. Glaube ich eher nicht, weil toolame keine Probleme hat, wenn direkt eine Datei in Anführungszeichen mitgegeben wird.
Die Umbennung gefällt mir ebensowenig wie mit $IFS rumzuhantieren. Ursprungsdatei und Shell-Umgebung sollen unberührt bleiben. Fall es einer brauchen kann, hier meine python Lösung:
#!/usr/bin/env python
import os, string, re
def main():
liste=os.listdir(os.getcwd())
for datei in liste:
if re.search('.ogg',datei) is False:
continue
eingabe='"'+datei+'"'
kommando='oggdec '+eingabe
os.popen(kommando,'w')
liste=os.listdir(os.getcwd())
for datei in liste:
if re.search('.wav',datei) is False:
continue
eingabe='"'+datei+'"'
kommando='toolame '+eingabe
os.popen(kommando,'w')
main()
Wer bei Python ähnlich neu ist: Die Einrückungen werden beim Schriben zwar angezeigt, im Forum dann aber nicht. Muscha von Hand machen. (Aber das kennen wir Computer-Menschen ja nicht anders )
Beim Aufruf aus ner Shell muß man also in dem verzeichnis sein, in dem die Dateien liegen.
Ob re hier überhaupt richtig verwendet wurde, weiß ich nicht. Ist aber nicht so tragisch, da das Skript jedenfalls nicht abbricht. |
_________________ unsensibel, aber empfindlich
Zuletzt bearbeitet von Witwe_Bolte am 09.07.2006, 18:31 Uhr, insgesamt 3 Male bearbeitet
|
|
|
|
 |
|
Titel:
Verfasst am: 09.07.2006, 15:53 Uhr
|
|
Anmeldung: 17. Dez 2003
Beiträge: 16792
|
|
Was für ne schöne kurze Scriptsprache  |
|
|
|
|
 |
|
Titel:
Verfasst am: 09.07.2006, 18:09 Uhr
|
|

Anmeldung: 05. Okt 2004
Beiträge: 2069
Wohnort: w3
|
|
Man könnte auch code-Boxen verwenden, die hier im Forum freizügig und gratis angeboten werden - dann wird die Wurst wenigstens leserlich ...
Greetings,
Chris |
_________________ "An operating system must operate."
|
|
|
|
 |
|
Titel: liest ja jetzt eh keiner mehr
Verfasst am: 18.07.2006, 12:19 Uhr
|
|

Anmeldung: 09. Apr 2005
Beiträge: 203
|
|
...dann kann ich das ja jetzt mal mit dieser Code-Box probieren.
Here we go:
Code:
#!/usr/bin/env python
import os, string
def main():
liste=os.listdir(os.getcwd())
for datei in liste:
if datei.endswith('ogg') == False:
continue
eingabe='"'+datei+'"'
kommando='oggdec '+eingabe
os.popen(kommando,'w')
liste=os.listdir(os.getcwd())
for datei in liste:
if datei.endswith('wav') == False:
continue
eingabe='"'+datei+'"'
kommando='**censored** '+eingabe
os.popen(kommando,'w')
kommando='rm -f *.wav'
os.popen(kommando,'w')
main()
|
_________________ unsensibel, aber empfindlich
|
|
|
|
 |
|
Titel: RE: liest ja jetzt eh keiner mehr
Verfasst am: 18.07.2006, 12:29 Uhr
|
|
Anmeldung: 17. Dez 2003
Beiträge: 16792
|
|
Kleine Variante mit basename statt sed:
for x in *.ogg; do ogg123 "$x" -dwav -f-|toolame - "$(basename "$x" .ogg).mp2"; done |
|
|
|
|
 |
|
Titel: Wow. Der Shellmeister
Verfasst am: 18.07.2006, 15:01 Uhr
|
|

Anmeldung: 09. Apr 2005
Beiträge: 203
|
|
Ist natürlich schicker. basename kannte ich gar nicht ( is es e wunder? )
Danke nochmal. Vielleicht kann ich noch mit nem Python vs. Bash Benchmark auftrumpfen
später: nö. schneller gehts mit scrpiting kaum.
Ne Idee, warum jetzt die Leerzeichen im Dateinamen bei toolame durchlaufen? |
_________________ unsensibel, aber empfindlich
|
|
|
|
 |
|
Titel: RE: liest ja jetzt eh keiner mehr
Verfasst am: 18.07.2006, 15:16 Uhr
|
|
Anmeldung: 17. Dez 2003
Beiträge: 16792
|
|
Nun deine Lösung geht über Zwischenfiles, die brauchen Platz, bringen aber nichts. Der Zeitaufwand sollte wohl ähnlich sein. |
|
|
|
|
 |
|
Titel: Leerzeichen und ich schon wieder
Verfasst am: 21.07.2006, 08:25 Uhr
|
|

Anmeldung: 09. Apr 2005
Beiträge: 203
|
|
Mein Problem bleiben die Leerzeichen in Pfade und Dateinamen.
Warum Deine for-Schleifen funzen und meine nicht, kapier ich nicht. Habe mit find -print0 und xargs -0 wohl alles durch. Selbst wenn die Ausgabe von xargs -0 brav den ganzen Namen in "" ausgibt, bekommt zB rm immer die einzelnen Wörter. Das gleiche mit Backticks. Die Exapnsio *.suffix haut bei Dir ja hin. Wie kann ich aber mit ner Schleife Verzeichnisbäume mit Leerzeichen durchlaufen. Außer ls und find ist mir bisher nix eingefallen.
Muß ich vielleicht doch IFS mit " oder \n überschreiben?
Bleibt das dann für diese shell oder diesen Prozeß privat oder wird das global (i trau mi ned). Soifz |
_________________ unsensibel, aber empfindlich
|
|
|
|
 |
|
Titel: RE: Leerzeichen und ich schon wieder
Verfasst am: 21.07.2006, 13:51 Uhr
|
|
Anmeldung: 09. Jan 2006
Beiträge: 1720
|
|
warum kanos zeile funzt ist doch klar. "*.og".
" != '' != ' ' das geht leider nicht. das müßte so " " heißen. '' ist ein NULL zeichen. nix nada.
'%20' geht wieder.
Kano löst es mit dem Stern for der erweiterung. Und Stern heißt alle Zeichen in der kette. |
|
|
|
|
 |
|
Titel:
Verfasst am: 21.07.2006, 15:18 Uhr
|
|

Anmeldung: 09. Apr 2005
Beiträge: 203
|
|
@Schnorrer: Daß for x in *.ogg expandiert wird, war mir schon klar. Davon gehen aber die Leerzeichen in den Dateinamen nicht weg. In der Expansion werden die Leerzeichen aber weder escaped, noch werden die Ausgaben in "" gesetzt. Beispiel: for x in *; do echo $x; done gibt brav alle Dateien und Verzeichnisse zeilenweise aus. Jetzt kommts:
for x in *; do echo $x && ls; done findet bei ls die Namen mit den Leerzeichen nicht.
Vielleicht vergeht das Brett vor meinem Hirn in den nächsten 2 Wochen. Bin Jetzt erst mal im Urlaub.
Besorgt mir bis dahin das ultimative AHA-Erlebnis. (bittebitte) |
_________________ unsensibel, aber empfindlich
|
|
|
|
 |
|
Titel:
Verfasst am: 21.07.2006, 18:26 Uhr
|
|
Anmeldung: 09. Jan 2006
Beiträge: 1720
|
|
ls hat schon immer ein Problem mit Leerzeichen gehabt.
for x in *;
do
echo $x && ls; ### gib nur etwas aus wenn die Expr == true ist. also kein LS, da echo $x ja nicht "ls" auspuckt.
### fahre ohne Ausgabe bei done fort.
done
for x in *;
do
echo $x,
ls;
done
das ist was du willst. |
|
|
|
|
 |
|
Titel: @schnorrer
Verfasst am: 07.08.2006, 17:49 Uhr
|
|

Anmeldung: 09. Apr 2005
Beiträge: 203
|
|
1. Tag nach dem Urlaub
öhömm. Nit böse sein, aber ich glaube, daß keines von den beiden das tut, was Du glaubst:
Das erste macht nach jedem echo einfach ls. Der return von echo ist ja zumindest solange TRUE, solange echo was ausgeben kann.
Das zweite schreibt nach der echo-Ausgabe einfach 'ls'. Klar. Was auch sonst. in dem Ausdruck echo $x, ls wird eben das $x expandiert. Sonst nix.
BTW: ls ist eines der tools, das gerade keine Probleme mit Leerzeichen hat. |
_________________ unsensibel, aber empfindlich
|
|
|
|
 |
|
Titel: RE: @schnorrer
Verfasst am: 07.08.2006, 17:58 Uhr
|
|
Anmeldung: 17. Dez 2003
Beiträge: 16792
|
|
Du solltest meinen code nochmals angucken, in deinem Beispiel vergisst du IMMER die "" um "$x". |
|
|
|
|
 |
|
Titel: da brichsch zamm
Verfasst am: 08.08.2006, 00:50 Uhr
|
|

Anmeldung: 09. Apr 2005
Beiträge: 203
|
|
oder so.
ne Woche später:
WOW: for x in */*/* geht auch. Wahnsinn. Mächtig.
Äh: Wie tief geht denn das? Da wüßte ich gar nicht wonach ich googeln sollte. |
_________________ unsensibel, aber empfindlich
|
|
|
|
 |
|