| 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: 16809
 
 
 |  | 
        
          | 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: 16809
 
 
 |  | 
        
          | 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: 16809
 
 
 |  | 
        
          | 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: 16809
 
 
 |  | 
        
          | 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: 16809
 
 
 |  | 
        
          | 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: 16809
 
 
 |  | 
        
          | 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
 |  
         
	        |  |  | 
  
    |  | 
  
    |  | 
  
  
    |  |