LINUX.ORG.RU

bash-скрипты: пробелы в именах файлов


0

0

Наклепал такой скрипт. Работает нормально, пока в именах файлов не встречаются пробелы. Помогите отладить, пожалуйста.

Пробовал указывать для 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'). И живи спокойно.

anonymous
()

Проблема в том, что for не различает пробелы и переносы строки. Можно заставить его различать эти символы, переопределив внутреннюю переменную IFS, можно пойти другим путем, например так

ls | while read file do cat "$file" done

Вообще тут много способов решения.

anonymous
()
Ответ на: комментарий от anonymous

> Проблема в том, что for не различает пробелы и переносы строки.

Не только. oggenc my file 1.mp3 что сделает? Короче нефиг закапываться в кавычках и обратных слэшах, просто не надо использовать такие имена.

anonymous
()
Ответ на: комментарий от anonymous

Я и говорю - зачем с этим возиться.

anonymous
()

Можно еще так:

find -name '*.mp3' -mindepth 1 -maxdepth 1 | \
sed -e 's/\(.*\)\.mp3$/\1/' | \
xargs -i sh -c "lame --decode '{}.mp3' '{}.wav' ; rm '{}.mp3'" и т.д.

Можно разбить на два скрипта: один ищет (find и sed), второй исполняет команды (все, что в sh):

find-mp3names | xargs -l toogg

Можно perl использовать.

Можно еще извратиться с make.

anonymous
()
Ответ на: комментарий от anonymous

можно еще и такой изврат использовать

в начале скрипта поставить rename " " _ *.mp3

а в конце - rename _ " " *.ogg

ananas ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.