Hi, ich habe eine Frage zu for-Schleifen. Um wav-Dateien in mp3-Dateien umzuwanden habe ich folgende Zeile eingegeben: for i in $(ls *.wav); do lame --alt-preset 112 $i $i_112.mp3; done Es schien auch alles zu funktionieren. Groß war meine Verwunderung, als dann kein mp3 erzeugt wurde. Ich habe dann gesucht und folgende Zeile gefunden: Encoding track-01.wav to .mp3 Es funktioniert erst, wenn ich folgendes eingebe: for i in $(ls *.wav); do lame --alt-preset 112 $i $i.112.mp3; done Was mache ich falsch? Gued gohn Achim
Am Samstag, 1. November 2003 17:28 schrieb Joachim Tüns:
Hi,
ich habe eine Frage zu for-Schleifen. Um wav-Dateien in mp3-Dateien umzuwanden habe ich folgende Zeile eingegeben: for i in $(ls *.wav); do lame --alt-preset 112 $i $i_112.mp3; done hier wird versucht auf die Variable $i_112 zuzugreifen, diese ist aber leer :)
Es schien auch alles zu funktionieren. Groß war meine Verwunderung, als dann kein mp3 erzeugt wurde. Ich habe dann gesucht und folgende Zeile gefunden: Encoding track-01.wav to .mp3
Es funktioniert erst, wenn ich folgendes eingebe: for i in $(ls *.wav); do lame --alt-preset 112 $i $i.112.mp3; done oder: for i in $(ls *.wav); do lame --alt-preset 112 $i ${i}.112.mp3; done
Was mache ich falsch? s.o.
Gued gohn Achim MfG Markus
Hallo, Am Sat, 01 Nov 2003, Markus Hochmann schrieb:
Am Samstag, 1. November 2003 17:28 schrieb Joachim Tüns:
Hi,
ich habe eine Frage zu for-Schleifen. Um wav-Dateien in mp3-Dateien umzuwanden habe ich folgende Zeile eingegeben: for i in $(ls *.wav); do lame --alt-preset 112 $i $i_112.mp3; done hier wird versucht auf die Variable $i_112 zuzugreifen, diese ist aber leer :)
Genau. Die bash nimmt _ nicht als Variablentrenner (wie bei . oder /).
oder: for i in $(ls *.wav); do lame --alt-preset 112 $i ${i}.112.mp3; done
Bitte die Variablen quoten! Gerade bei sowas hat man ja oefter mal Leer und andere Sonderzeichen... ls *.wav | while read f; do \ lame --alt-preset 112 "$f" "${f}_112.mp3"; \ done Bei 'for i in $(...); do' bekommt man ebenfalls eher Aerger mit Sonderzeichen als mit '... | while read i; do'. -dnh -- Ansonsten frage ich mich ob es wirklich notwendig ist, dass sich die Berichterstattung zu technischen Themen auch im WDR zunehmend auf das niedrigste denkbare Niveau der Zuschauer begibt, statt den Versuch zu wagen das Niveau derselben zu heben. -- S. Wilde ueber WDR "Angeklickt"
Hallo David, stimmt und danke! Am Samstag November 01 2003 18:50 schrieb David Haller:
Am Sat, 01 Nov 2003, Markus Hochmann schrieb:
Am Samstag, 1. November 2003 17:28 schrieb Joachim Tüns:
for i in $(ls *.wav); do lame --alt-preset 112 $i $i_112.mp3; done
hier wird versucht auf die Variable $i_112 zuzugreifen, diese ist aber leer :) for i in $(ls *.wav); do lame --alt-preset 112 $i ${i}.112.mp3; done
Bitte die Variablen quoten! Gerade bei sowas hat man ja oefter mal Leer und andere Sonderzeichen...
ls *.wav | while read f; do \ lame --alt-preset 112 "$f" "${f}_112.mp3"; \ done
Bei 'for i in $(...); do' bekommt man ebenfalls eher Aerger mit Sonderzeichen als mit '... | while read i; do'.
Gued gohn Achim
Joachim Tüns schrieb:
ich habe eine Frage zu for-Schleifen. Um wav-Dateien in mp3-Dateien umzuwanden habe ich folgende Zeile eingegeben: for i in $(ls *.wav); do lame --alt-preset 112 $i $i_112.mp3; done
Versuch besser mal: for i in *.wav; do lame --alt-preset 112 $i ${i}_112.mp3; done Sinnvoller waere aber vielleicht: for i in *.wav; do lame --alt-preset 112 $i ${i/\.wav/_112\.mp3}; done Gruesse, Th.
Hi Thomas und Markus, ein großes Dankeschön (ich arbeite mich gerade in solche Dinge ein und finde viele Dinge in der Bash einfach toll, auch wenn ich von Windows komme). Am Samstag November 01 2003 17:46 schrieb Thomas Hertweck:
Joachim Tüns schrieb:
ich habe eine Frage zu for-Schleifen. Um wav-Dateien in mp3-Dateien umzuwanden habe ich folgende Zeile eingegeben: for i in $(ls *.wav); do lame --alt-preset 112 $i $i_112.mp3; done for i in *.wav; do lame --alt-preset 112 $i ${i/\.wav/_112\.mp3}; done
Was habe ich gelernt (ich hoffe richtig zu liegen)? $i ist nur eine Kurzform der zuvelässigeren Form ${i} und bei der Parameter- und Variablenexpansion kann ich auch Texte ersetzen ${i/suche/ersetze} Klasse und Danke! Gued gohn Achim
Joachim Tüns schrieb:
Was habe ich gelernt (ich hoffe richtig zu liegen)? $i ist nur eine Kurzform der zuvelässigeren Form ${i} und bei der Parameter- und Variablenexpansion kann ich auch Texte ersetzen ${i/suche/ersetze}
So ungefaehr, ja... Wie andere schon schrieben: man muss ein wenig mit "gemeinen" Dateinamen aufpassen, die z.B. Leerzeichen enthalten. Quoten ist oft eine gute Sache. Man muss seinen Shell-Befehl eben den jeweiligen Bedingungen anpassen. Wenn ich weiss, dass ich nur "normale" Dateinamen habe, dann kann ich gewisse Dinge einfacher gestalten. Was ${i/suche/ersetze} angeht: In dieser Variante wird nur das erste Auftauchen von "suche" durch "ersetze" ersetzt in der expandierten $i Variable. Bei David hast Du auch mal ein ${i//suche/ersetze} gesehen - das wird dann alle Vorkommen von "suche" durch "ersetze" ersetzen. Evtl. waere in Dei- nem Falle ein ${i/%suche/ersetze} angebracht, denn das % sorgt da- fuer, dass "suche" am Ende der expandierten Variable $i zutreffen muss - insbesondere wenn man also Suffices ersetzen will in Datei- namen, kann das hilfreich sein. Kleines Beispiel: $> i="wav_datei_wav.wav" <- meine Variable $> echo ${i/wav/wuff} <- nur erstes Auftauchen von wav wird wuff_datei_wav.wav durch wuff ersetzt $> echo ${i//wav/wuff} <- alle vorkommenden wav in $i werden wuff_datei_wuff.wuff durch wuff ersetzt $> echo ${i/%wav/wuff} <- nur das wav am Ende der expandierten wav_datei_wav.wuff Variablen $i wird ersetzt durch wuff $> Aber vorsicht: diese Art der Variablenmanipulation ist Bash-spezi- fisch. Siehe "man bash", Kapitel "EXPANSION", Unterkapitel "Para- meter Expansion". HTH, Thomson
Hallo Thomas, Am Sonntag November 02 2003 11:00 schrieb Thomas Hertweck:
Joachim Tüns schrieb:
der Parameter- und Variablenexpansion kann ich auch Texte ersetzen ${i/suche/ersetze}
So ungefaehr, ja... Wie andere schon schrieben: man muss ein [..] Aber vorsicht: diese Art der Variablenmanipulation ist Bash-spezi- fisch. Siehe "man bash", Kapitel "EXPANSION", Unterkapitel "Para- meter Expansion".
da hast Du Recht. Und ich benutze das auch nicht ohne 'mal nachzuschauen, was passiert. Und mit dem Hinweis konnte ich nun sehr gezielt in der Doku suchen. Mir sind auch Unterschiede bei der Expansion in "for ..." und "ls *.wav | while ..." aufgefallen. Bei den nächsten Aufgaben, die ich so oder ähnlich lösen will, taste ich mich wieder voran: lesen, probieren und ggf. fragen. Gued gohn Achim PS: Eines gestehe ich mir nicht zu; für meinen Fall etwa eine Frage zu formulieren wie: Ich möchte mit lame viele wav in mp3 umwandeln und gleichzeitig die Dateiendung ersetzen. Wie geht das am bequemsten?
participants (4)
-
David Haller
-
Joachim Tüns
-
Markus Hochmann
-
Thomas Hertweck