cL0N31 Опубликовано 30 октября, 2009 Жалоба Опубликовано 30 октября, 2009 нужно сконвертировать пару тон мп3 которые лежат по разным директориям... дерево каталогов нужно сохранить... в комплекте с lame есть 3 скрипта для массового конверта, но не один из них не создаёт директории а всё валят в один каталог... помогите отредактировать данный скрипт для моих целей чтоб всё запихалось как надо: #!/bin/sh# # auenc -- version 0.1## A wrapper for lame to encode multiple files. By default, a .wav# extension is removed and replaced by .mp3 .## © 1999 Gerhard Wesp <gwesp@cosy.sbg.ac.at> under the GPL.# set the variables below according to your tasteLAME=lameLAME_OPTS="-S -h -v -V 0 -b 256" # high quality, silent operationif [ $# -lt 1 ] ; then exec 1>&2 cat << _EOF_usage: $0 [options] file...options: -d --delete: delete original file after successful encoding_EOF_ exit 1fiunset DELETEcase "$1" in -d | --delete ) DELETE=1 ; shift ;;esacfor fdo $LAME $LAME_OPTS "$f" `basename "$f" .wav`.mp3 || { exec 1>&2 echo "encoding of $f failed, aborting..." exit 1 } if [ -n "$DELETE" ] ; then rm -f "$f" fidone Цитата
gogi Опубликовано 30 октября, 2009 Жалоба Опубликовано 30 октября, 2009 cL0N31 писал(а) Fri, 30 October 2009 06:00 нужно сконвертировать пару тон мп3 которые лежат по разным директориям... дерево каталогов нужно сохранить... в комплекте с lame есть 3 скрипта для массового конверта, но не один из них не создаёт директории а всё валят в один каталог... помогите отредактировать данный скрипт для моих целей чтоб всё запихалось как надо: Если новые файлы должны оказаться в тех же какалогах, то, например, так #!/bin/sh# set the variables below according to your tasteLAME=lame#LAME=echoLAME_OPTS="-S -h -v -V 0 -b 256" # high quality, silent operation#LAME_OPTS=""if [ $# -lt 1 ]; then echo "usage: $0 [options] dir options: -d --delete: delete original files after successful encoding" exit 1fiunset DELETEcase "$1" in -d | --delete ) DELETE=1 ; shift ;;esacfind $1 -type f -name "*wav" | while read f; do dir=`dirname "$f"` newfile=$dir`basename "$f" .wav`.mp3 $LAME $LAME_OPTS "$f" $newfile || { echo "encoding of $f failed, aborting..." exit 1 } if [ -n "$DELETE" ] ; then rm -f "$f" fidoneexit 0 Если в новом дереве, то ещё нужно создать каталог mkdir -p $newdir в цикле перед запуском lame а базовый каталог для нового дерева во втором (или третьем, если первый -d) параметре передавать. Мне так думается Пишите, если нужно будет, поправим. Цитата
cL0N31 Опубликовано 31 октября, 2009 Автор Жалоба Опубликовано 31 октября, 2009 gogi: попробовал твой скрипт... короче он работает но совсем не так как мне надо... примерно такая ботва получилась: $ ~/auenc ~/dir1f = ~/dir1/dir2/dir3/some.wavdir = ~/dir1/dir2/dir3newfile = ~/dir1/dir2/dir3some.wav.mp3 короче там походу слеш пропущен, но мне не надо создавать файлы в тех же директориях с новыми именами... хреново объяснил, сорри... короче мне надо запихать файлы в совершенно отличный от dir1 каталог, но всю нижнюю структуру dir2, dir3 и тд нужно воссоздать под этим новым каталогом Цитата
gogi Опубликовано 31 октября, 2009 Жалоба Опубликовано 31 октября, 2009 cL0N31 писал(а) Sat, 31 October 2009 04:56 попробовал твой скрипт... короче он работает но совсем не так как мне надо... короче там походу слеш пропущен, но мне не надо создавать файлы в тех же директориях с новыми именами... хреново объяснил, сорри... короче мне надо запихать файлы в совершенно отличный от dir1 каталог, но всю нижнюю структуру dir2, dir3 и тд нужно воссоздать под этим новым каталогом Я тебе дал направление, что нужно делать, если необходимо создать новое дерево каталогов. А ты не удосужился дописать две строки. Писать за тебя готовые скрипты - это не задача форума. Здесь принято помогать тем, кто сам пытается что-то сделать и чему-то научиться, но не получается в силу недостатка информации или опыта. #!/bin/bashLAME=lameLAME_OPTS="-S -h -v -V 0 -b 256" # high quality, silent operationif [ $# -lt 2 ]; then echo "usage: $0 [options] dir newdir options: -d --delete: delete original files after successful encoding" exit 1fiunset DELETEcase "$1" in -d | --delete ) DELETE=1 ; shift ;;esac[ ! -d "$1" ] || [ "X$2" != "X" ] || { echo "usage: $0 [options] dir newdir"; exit 1;}find $1 -type f -name "*wav" | while read f; do file=${f#$1} newdir=$(dirname "$2/$file") mkdir -p $newdir newfile="$newdir$(basename "$f" .wav).mp3" $LAME $LAME_OPTS "$f" "$newfile" || { echo "encoding of $f failed, aborting..." exit 1 } if [ -n "$DELETE" ] ; then rm -f "$f" fidoneexit 0 Обрати внимание на изменение в первой строке и на формат строки запуска скрипта. Каталоги можно задавать и с абсолютными и относительными путями. PS. Извиняюсь. Работать будет, но такой стиль самому глаз режет Вместо mkdir -p $newdir Стоит написать [ -d $newdir ] || mkdir -p $newdir || { echo "Can't create $newdir"; exit 1 } Цитата
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.