在 ~/mp3 里面我有一些 mp3 文件。
我的脚本:
#!/bin/bash
br=80
for a in $1*.{wav,mp3} ;
do ffmpeg -i "$a" -ar 44100 -ab $br "$br""_tmp/${a%.*} ["$br"].mp3" ;
用 $1 添加路径:
myscript.sh /home/$USER/mp3/
但我有错误:
/home/$USER/mp3/*.mp3: No such file or directory
因此,该脚本不会运行。仅当我在 ~mp3 目录中执行脚本时运行。
答案1
放在顶部脚本:
shopt -s nullglob
这样,如果没有像你的情况那样的 mp3(我猜),就不会出现错误。
当没有与通配符匹配的 mp3 文件时,shell 将按*.mp3
字面意思进行处理。
答案2
.mp3
发生这种情况是因为目录中没有文件。如果您在没有.mp3
和文件的目录中执行此查找.wav
,您将收到 2 个错误,一个针对文件*.mp3
,第二个针对*.wav
文件。
一个简单的解决方案是在文件存在.mp3
或.wav
丢失时添加测试:
for a in $1*.{wav,mp3}; do
test -f "$a" || continue
ffmpeg -i "$a" -ar 44100 -ab $br "$br""_tmp/${a%.*} ["$br"].mp3"
done
也就是说,@sputnick的解决方案shopt -s nullglob
比这更好。
您还应该引用$1
,并且可以简化该行中的引号ffmpeg
:
for a in "$1"*.{wav,mp3}; do
test -f "$a" || continue
ffmpeg -i "$a" -ar 44100 -ab $br "${br}_tmp/${a%.*} [$br].mp3"
done