我有一堆文件,其名称格式为:
artist name - song name.mp3
我正在编写一个bash脚本,它将提取艺术家和歌曲名称,并将该文件放在名为"艺术家名称"的目录中。文件名只是"歌名.mp3"。
我如何找到" - "所以我可以将艺术家和歌曲名称解析为适当的变量。另外,我如何查看某个"艺术家姓名"已经有一个目录,然后将该新文件放入该目录?
答案 0 :(得分:3)
我相信这可以做你想要的:
for f in *.mp3; do artist=${f%% - *}; song=${f#* - }; mkdir -p "$artist"; mv "$f" "$artist/$song"; done
或者,如果您要写一个脚本:
for f in *.mp3; do
artist=${f%% - *}
song=${f#* - }
mkdir -p "$artist"
mv "$f" "$artist/$song"
done
for f in *.mp3; do
这将启动当前目录中每个mp3文件的循环。
artist=${f%% - *}; song=${f#* - }
这将提取艺术家的名字并将其保存在shell变量artist
中并提取歌曲的名称并将其保存在shell变量song
中。
这使用三个字符space-dash-space作为艺术家和歌曲之间的分隔符。
${f%% - *}
是后缀删除的示例。 shell查找- *
的最长模式(glob)并将其从变量f
的末尾删除。
${f#* - }
是前缀删除的示例。 shell查找* -
的最短模式(glob)并将其从变量f
的开头删除。
man bash
在“参数扩展”标题下记录了后缀删除和前缀删除。
mkdir -p "$artist"
这可以确保有一个为艺术家命名的目录。
mv "$f" "$artist/$song"
这会将mp3文件移动到目录
done
这表示循环结束。