用于整理播放列表文件并在命令行中输入的脚本

时间:2018-06-18 20:16:00

标签: bash

首先,我很抱歉在编写脚本时我是一个新手。

我目前正在使用一个名为xwax的程序,它允许我通过黑胶唱片播放数字音乐。该程序已安装并启动并运行,但在安排我的音乐时我可能会学习一些调整。

启动程序的基本命令是:

$ xwax -a hardware device -l /Path/To/Music/Files

-l是存储音乐或播放列表的标志

该程序拥有自己的播放列表格式(.xwaxpls),我已经为每个条目(或者程序称之为" CRATE")导出了我自己的播放列表。

阅读邮件列表后,无法单独列出多个文件夹/播放列表(CRATES)。如果我确实要包含几个,我必须输入:

$ xwax -a hardware device -l /Path/To/Music/Files/0.wxaxpls -l /Path/To/Music/Files1/1.wxaxpls -l /Path/To/Music/Files2/2.wxaxpls -l /Path/To/Music/Files3/3.wxaxpls等等。当然这很麻烦。

必须创建一个启动脚本,因为每个人都有不同的组织音乐的方式。

从我学到的很少,我以为我可以在.xwaxpls中搜索每个~/Music/SubDirectories文件并使用$创建一个条目?

所以希望我最终得到:

$ xwax - a hardware device 1 -l $PLAYLISTS($ PLAYLISTS是任何扩展名为.xwaxpls的文件)

我将如何实现这一目标?

2 个答案:

答案 0 :(得分:1)

我会这样做:

playlist_options=()   # an empty array
while IFS= read -d "" -r xwaxpls; do 
    playlist_options+=( -l "$xwaxpls" )
done < <(
    find /Path/To/Music/Folders -name '*.xwaxpls' -print0
)
# remove "echo" if the result looks OK
echo xwax -a "hardware device" "${playlist_options[@]}"

那里有很多事情要发生。一些学习环节:

答案 1 :(得分:1)

使用bash的globstar获取所有.xwaxpls文件。 将文件存储在一个数组中,并在每个文件前放置一个-l

#! /bin/bash
shopt -s globstar
for file in /Path/To/Music/Files/**/*.xwaxpls; do
    playlist+=(-l "$file")
done
xwax -a hardware device "${playlist[@]}"

编辑:似乎格伦杰克曼有同样的想法。唯一的区别是,他使用find来查找所有文件,这种方法使用了bash的内置globstar功能。