Linux 找不到现有文件
有一个bash脚本,我使用它在转换MP3文件之前从中提取艺术品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
#!/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
。非常感谢!