bash 添加路径来处理一些文件

bash 添加路径来处理一些文件

在 ~/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

相关内容