Или Вы могли пропустить $?
в целом. Если Ваша команда cmd
, следующее должно работать:
function foo {
(cd $FOOBAR;
if cmd
then
echo "OK!"
else
echo "Nope!"
fi
)
}
Наконец-то я закончил с этим сценарием. Также работает, если в ваших .mp3-файлах есть пробелы в именах файлов и без дополнительных расширений в новых созданных файлах.
for file in ~/Main_dir/*.mp3; do
convert -background lightblue -size 300x200 -fill blue -pointsize 40 -gravity center label:"$(basename "$file" .mp3)" "${file%.*}.png";
avconv -i "${file%.*}.png" -i "${file%.*}.mp3" "${file%.*}.flv";
done
для описания первой команды convert смотрите мой ответ на AskUbuntu
$(basename "$file" . mp3)
:Командой $(имя базиса "$file")
я пытался получить только имя файла с расширением, а командой $(имя базиса "$file" .mp3)
удалил и его расширение.
$ for file in ~/Main_dir/*.mp3; do echo $(basename "$file" .mp3);done
039 - Del Nevesht - noraei
Eluveitie - Meet The Enemy
$ for file in ~/Main_dir/*.mp3; do echo $(basename "$file");done
039 - Del Nevesht - noraei.mp3
Eluveitie - Meet The Enemy.mp3
${file%.*}
:Я использую это для получения полного пути к файлу без его расширения.
$ for file in ~/Main_dir/*.mp3; do echo ${file%.*};done
/home/KasiyA/Main_dir/039 - Del Nevesht - noraei
/home/KasiyA/Main_dir/Eluveitie - Meet The Enemy
И со следующей строкой в скрипте вы добавите созданную .png метку в ваши .mp3 файлы.
Примечание: Я использовал avconv
вместо ffmpeg
. Вы можете использовать его, если у вас не установлен пакет ffmpeg
.
Из того, что я понял с вашего вопроса, я написал сценарий Bash. Можете ли вы проверить, работает ли это правильно для вас?
#!/bin/bash
DIR="/path/to/directory"
FILES=`ls -1 "$DIR" | grep mp3$`
for file in "$FILES"
do
FILENAME=`echo "$file" | cut -d "." -f1`
convert -size 300x200 xc:lightblue -font Bookman-DemiItalic -pointsize 40 -fill blue -gravity center -draw "text 0,0 '${FILENAME}'" ${FILENAME}.png
ffmpeg -i ${FILENAME}.png -i $file ${FILENAME}.flv
done
Для преобразования всех файлов MP3 в одной папке вы можете использовать следующий код. Может быть, вы должны исправить имена папок, если вы не хотите иметь все файлы в одной папке.
#!/bin/bash
SRCPATH="/home/user"
SRCEXT=".mp3"
SRCFILES="($SRCPATH/*$SRCEXT)"
cd $SRCPATH
for FILE in "${SRCFILES[@]}"; do
SELECTION="$(basename $FILE $SRCEXT)"
convert -size 300x200 xc:lightblue -font Bookman-DemiItalic -pointsize 40 -fill blue -gravity center -draw "text 0,0 '$SELECTION'" $SELECTION.png
ffmpeg -i $SELECTION.png -i $FILE $SELECTION.flv
done