Linux 找不到现有文件

Linux 找不到现有文件,linux,bash,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&g

有一个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
artwork文件提取得很好,我可以通过ls输出看到它,用于获取文件名的变量是正确的(没有标题/尾随空格等),但在脚本中,nor convert或任何其他ls都找不到它(没有这样的文件或目录)

它真的让我发疯

附加信息:当我启动带有-x标志的脚本时,我的文件名的每个表示都是黄色的,我不明白为什么

谢谢你的帮助


Jérémie

您没有尝试通过过滤命令的输出来获取文件名,为什么不:

#!/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

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

文件是否包含空格?-z和-n表示字符串,而不是文件。您可能需要-f和/或-r和/或-e和/或-s实际上,如果IMAGE\u文件为空,
[-z$IMAGE\u FILE]
将计算为true(因为此时您正在运行命令
[-z]
,并且使用单个参数
[
仅检查该参数是否为空,“-z”不为空)。与许多其他情况一样,正确的答案是在展开变量时将其用双引号括起来:
[-z“$IMAGE\u FILE”]
我必须验证字符串是否存在,因为如果MP3没有嵌入任何图像,脚本将不得不绕过convert命令,而嵌入默认图像。太好了!我只需将
文件名=($(/bin/ls-1$mydir))
重写为
文件名=$(/bin/ls-1 mydir
。非常感谢!