-2

在转换 MP3 文件之前,我使用了一个 bash 脚本从它们中提取图稿。

#!/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 标志启动脚本时,我的文件名的每个表示都是黄色的,无法弄清楚为什么......

谢谢你的帮助 !

热雷米

4

1 回答 1

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

未经测试,但可以工作......(大约;-)

于 2012-12-15T15:02:34.633 回答