[bash]Leerzeichen mit backslash schützen

P

Phate

Frickler/Kellerkommunist
Hi,
ich habe ein script geschrieben welches mit lame mp3s konvertiert. Nun habe ich das Problem, daß einige mp3s massig Leerzeichen im Namen haben, was lame verwirrt und zu eineer Fehlermeldunng führt. Angenommen ich habe ein Verzeichnis mit mp3s die ich konvertieren möchte, so schreibe ich sie mit ls in eine Datei und übergebe jede Zeile (jede mp3) in einer while read-Schleife an lame.
Wie kann man jetzt vor die Leerzeichen backslashes setzen?

Code:
#!/bin/bash
ls | grep .mp3 > file

while 
  read var
do
  echo $var
  echo "encoding $var"
# Hier muß jetzt aus "foo bar bla fasel.mp3" "foo\ bar\ bla\ fasel.mp3" gemacht  werden. 
  $LAME -b 128 $var "new_"$var
done < file

Danke!
 
Ha mit sed. mal ohne das jetzt geprüft zu haben (weil grad kein gescheites OS zur Hand)
würd ich mal sagen:
Code:
sed -e 's/\ /\\\ /g'
probiers halt mal in ner bash mit nem echo.
 
Danke funktioniert! :)
Eine Frage noch zu sed, laut man-page ersetze ich einen ausdruck durch den nächsten, also sed 's/oldexpr/newexpr/g' .. gut, aber wieso dann drei backslashes bei dem neuen Ausdruck? Muß man den backslash in der shell wiederum mit einem backslash schützen?
 
Ja genau. Sonderzeichen müssen, sobald sie als "funktionsloses Zeichen" verwendet werden sollen anhand eines Backslashes kenntlich gemacht werden. Das ist nicht nur bei der bash so. Schau Dir mal ein wenig Doku zum Thema regexp (Regular Expressions) an.
 
schon mal mit anfuehrungszeichen versucht? "$var" ?

auf bald
oenone
 
schon mal mit anfuehrungszeichen versucht? "$var" ?
Jo klar, das sollte natürlich auch gehen, hätt ich auch dran denken können. Scripte mit awk & sed geben halt mehr her :]
 
Prost Gemeinde,

Phate schrieb:
Wie kann man jetzt vor die Leerzeichen backslashes setzen?

Danke an Phate... sein Problem hat meines gelößt, habe ich doch damit gekämpft die Dateien mit einen "for var in `ls -1`"-Konstrukt zu lesen, was so gar nicht klappen will.

Hier noch eine Möglichkeit um sich das von Cybermarc vorgeschlagene
Code:
sed -e 's/\ /\\\ /g'
zu umgehen.
Es gibt bei ls zumindest unter Linux einen eine Option namens --quoting-style kurz -b:

Code:
ls -b| grep .mp3 > file
sollte also tun.

Gruß,
Humph
 
Jo, aber ein kleiner Fehler ist noch drinne. Es kann ja auch sein, das die Files eine Endung ala .MP3 .Mp3 oder .mP3 haben, daher sollte grep mit der Option -i verwendet werden.
Code:
ls -b | grep -i .mp3 >file
 
oder gleich ls *.[mM][pP]3

auf bald
oenone
 

Ähnliche Themen

'xml Parser' in bash

Jaunty + Zend + Gdata + xampp

Blank (" ") durch "\ " ersetzen

MPD und Externe Festplatte?

Zurück
Oben