Код: Выделить всё
#!/bin/bash
#всякие украшалки...
function progress_bar
{
if [ -z "$1" ]
then
exit -1
fi
if [ "$1" -gt "100" ]
then
echo "overflow"
exit -2
fi
SOME="="
EMPTY=" "
COLUMNS=80
BAR_LENGTH=$(($(($COLUMNS))-6))
DOT=$(($BAR_LENGTH))
PERCENT=$(($1*$DOT/100))
echo -en "\r|"
for ((i=0;$i<$PERCENT;i=$i+1))
do
echo -n "$SOME"
done
for ((i=$PERCENT;i<$BAR_LENGTH;i=$i+1))
do
echo -n "$EMPTY"
done
echo -n "|$1%"
}
echo "Convertion progress:"
let COUNTER=0
#считаем количество аудио-файлов
for NAME in ./*.mp3;
do
if [ "$NAME" == "./*.mp3" ]
then
exit -1
fi
let COUNTER=$COUNTER+1
done
let CURRENT=0
#в этом цикле конвертируем тэги
for NAME in ./*.mp3;
do
let CURRENT=CURRENT+1
let __PROGRESS=(100*$CURRENT)/$COUNTER
if [ "$NAME" == "./*.mp3" ]
then
echo "no files in this directory"
exit -1
fi
TAG="$NAME"
echo "$TAG" | awk -F'[-]' '{print $2}' | iconv -f utf-8 -t cp1251 > tmp
read TAG < tmp
# можно было, конечно, и так
# echo "$TAG" | awk -F'[-]' '{print $2}' | iconv -f utf-8 -t cp1251 | read TAG
# но это почему-то не работает((
TAG=${TAG%".mp3"}
id3v2 --song "$TAG" "$NAME"
# если задан аргумент - то пишем значение для исполнителя.
# проблема с pipe - та же
if [ $# -eq 1 ]
then
echo "$1" | iconv -f utf-8 -t cp1251 > tmp
read TAG < tmp
id3v2 --artist "$TAG" "$NAME"
fi
# отображаем количество переконвертированных файлов
progress_bar $__PROGRESS
done
echo
# удаляем временный файл
rm -r tmp