首先,我很抱歉在编写脚本时我是一个新手。
我目前正在使用一个名为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
的文件)
我将如何实现这一目标?
答案 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功能。