shell - 这个 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、...之类的文件。我哪里出错了?请帮忙
解决方案
通配符文件名扩展由 shell 执行。当您的脚本运行时,shell 已经扩展P*mp3
为实际的文件名列表,因此$1
只是第一个文件名。
使用$*
而不是$1
.
推荐阅读
- javascript - 如何使用 API 中的数据更新组件的状态
- javascript - 有没有办法从javascript数组中找到一个对象
- python - 随机森林微调卡在运行中
- c - Sunxi ARM SoC唤醒原因?
- c# - 如何在使用标准用户启动/安装时提升帐户?
- javascript - 反应 onBlur 不影响整个表单元素
- vue.js - 如何使用 JSON Vue/vuex 映射专业化数组
- dictionary - 为什么 Data.Map.Map 不是双函子?
- javascript - Next.js 使用 getServerSideProps 如何将道具从页面传递到组件?
- qt - Qt get path to application for file type