找不到现有文件

时间:2012-12-15 13:26:49

标签: linux bash

我有一个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标志启动脚本时,我的文件名的每个表示都是黄色的,无法弄清楚原因......

感谢您的帮助!

热雷米

1 个答案:

答案 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

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