首页 > 解决方案 > 这个 shell 脚本只处理一个文件

问题描述

我想将 mp3 文件的标题和标签设置为文件名。例如,如果audio.mp3是文件的名称,则应将音频设置为标题和标签标签。要处理以字母P开头的所有 mp3 文件,我想将P*mp3作为命令行参数传递。我的shell脚本是:

# mp3tag.sh
# Change title and label of mp3 files to file name
# Feb-25-2019

if [ $# -lt 1 ]; then
    echo file name missing. Wild cards OK
    exit 1
fi

for i in $1; do 
    name=`echo $i | sed 's/....$//'` # Remove dot and mp3 from filename
    mp3info -t "$name" -l "$name" "$i"
    if [ $? -eq 0 ]; then
        echo Changed tags for "$i"
    else
        echo Error in changing tags for "$i"
    fi
done

该脚本仅处理目录中的第一个文件P1.mp3,尽管我有 P1.mp3、P2.mp3、...之类的文件。我哪里出错了?请帮忙

标签: shellunixtagsmp3

解决方案


通配符文件名扩展由 shell 执行。当您的脚本运行时,shell 已经扩展P*mp3为实际的文件名列表,因此$1只是第一个文件名。

使用$*而不是$1.


推荐阅读