Наклепал такой скрипт. Работает нормально, пока в именах файлов не встречаются пробелы. Помогите отладить, пожалуйста.
Пробовал указывать для ls параметры -Q и -b, не помогло.
Проблема, похоже, заключена в basename...
#!/bin/bash
if [ $# != 1 ]
then
echo
echo USAGE: mp3toogg \<quality\> \(integer from -1 to 10\)
echo
exit 1
fi
for MP3 in `ls -Q *.mp3`
do
WAV=`basename "$MP3" .mp3`.wav
lame --decode $MP3 $WAV
#echo $WAV
#echo $MP3
#sleep 5
echo Removing $MP3
rm $MP3
oggenc -q$1 -o `basename $MP3 .mp3`.ogg $WAV
echo Removing $WAV
rm $WAV
done
Не принято в юнихе иметь имена файлов с пробелами внутре. Пробел - разделитель аргументов в командной строке и все. Переименуй все файлы с пробелами в имени (замени пробел на, например, знак подчеркивания или '%20'). И живи спокойно.
Проблема в том, что for не различает пробелы и переносы строки. Можно заставить его различать эти символы, переопределив внутреннюю переменную IFS, можно пойти другим путем, например так