Проблема с BASH-скриптом и файлами с пробелами в именах
Здравствуйте!
Нужно получить файла вот такого примерно вида:
File1=/somedir/somefile1
File2=/somedir/somefile2
...
Пытаюсь сделать вот так:
dir="/mnt/d/Music/Down Low"
count=0
for i in "$( find "$dir" -iname "*.mp3" -o -iname "*.ogg" )"; do
let "count = $count + 1"
echo $count
echo "$i" >> "tmp_file"
done
Получается фигово:
$ cat /tmp/tmp_file
File1=/mnt/d/Music/Down Low/Down Low - Vision Of Life.ogg
/mnt/d/Music/Down Low/Down Low - Moonlight.mp3
/mnt/d/Music/Down Low/Down Low - Key To Your Heart.ogg
/mnt/d/Music/Down Low/Down Low - Thank You.mp3
/mnt/d/Music/Down Low/Down low - Once upon a time.mp3
/mnt/d/Music/Down Low/Down Low - Johny B.ogg
/mnt/d/Music/Down Low/Down Low - La Serenissima.ogg
Т.е. оно весь вывод find обрабатывает целиком. Если убрать кавычки вокруг
find (вот так: $( find "$dir" -iname "*.mp3" -o -iname "*.ogg" ) ), то оно
разбивает строку по пробелам. Перепробовал уже кучу вариантов, кавычки ставил
по-всякому - не выходит.
Как такое сделать?
Спасибо за ответы-советы.
Здравствуйте 9A4172.
Скрипт получился не очень красивый, но вреде работает.
#!/bin/sh
dir="/home/d3rp/music"
count=0
find $dir -iname "*.mp3" -o -iname "*.ogg" > listn
sed 's/ /|/g' listn > listm
for i in $(cat listm); do
count=$(($count+1))
echo $count
echo "File$count=$i" >> "tmp_file1"
done
sed 's/|/ /g' tmp_file1 > tmp_file
rm -rf tmp_file1 listn listm
-*Название листа "Linux: разрешение вопросов, перспективы и общение";
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 23078; Возраст листа: 868; Участников: 1472
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/487465