我有一个bash脚本用于在转换之前从MP3文件中提取图稿。
#!/bin/bash
MUSIC_FILE=$1
IMAGE_FILE=""
TIMESTAMP=$2
if [ -z "$MUSIC_FILE" ] ; then
exit 2;
fi
if [ -z $TIMESTAMP ] ; then
TIMESTAMP=$(date +%s)
fi
IMAGE_FILE=`/usr/bin/eyeD3 --write-images=. "$MUSIC_FILE" 2>&1 | grep Writing | sed -e 's/Writing //g' -e 's/\.\.\.//g' | tr ' ' '_'`
if [ -z $IMAGE_FILE ] ; then
exit 3
fi
if [ -e $IMAGE_FILE ] ; then
/usr/bin/convert $IMAGE_FILE $TIMESTAMP.png
exit 0
else
exit 4
fi
图稿文件很好地提取,我可以通过ls输出看到它,并且用于获取文件名的变量是正确的(没有标题/尾随空格等),但是在脚本内也没有转换也没有任何额外的ls找到它(没有这样的文件或目录)......
这真的让我感到疯狂......
附加信息:当我使用-x标志启动脚本时,我的文件名的每个表示都是黄色的,无法弄清楚原因......
感谢您的帮助!
热雷米
答案 0 :(得分:0)
不是通过过滤命令的输出来尝试获取文件名,而是为什么不:
#!/bin/bash
MUSIC_FILE="$1"
[ -f "$MUSIC_FILE" ] || exit 2
TIMESTAMP=${2:-$(date +%s)}
mydir=$(mktemp -d)
/usr/bin/eyeD3 --write-images=$mydir "$MUSIC_FILE" >/dev/null 2>&1
filename=($(/bin/ls -1 $mydir))
[ -f "$mydir/$filename" ] &&
convert $mydir/$filename" $TIMESTAMP.png
rm -fR $mydir
未经测试,但可以正常工作......(约; - )