创建“最近添加的相册”m3u播放列表

时间:2014-05-17 15:45:44

标签: shell m3u

我正在尝试创建一个与"最近添加的相册"相同的播放列表。您通常在iTunes中看到但使用$ NUM_OF_DAYS_BEFORE参数的播放列表。

我已经使用了这篇文章中的大多数想法:How to recursively find and list the latest modified files in a directory with subdirectories and times?

我创建了一个可以使用以下参数运行的脚本:

create_m3u /dir_root/with/mp3s 60

其中$ 1是我的mp3的根目录(其中包含也有mp3的文件夹) 其中$ 2是从今天开始倒退的天数,我想创建一个m3u播放列表文件。

脚本的主要部分是这个命令:

find $1 -type f -iregex '.*\.mp3' -mtime -$2 -exec stat --format '%Y %y %n' {} \; | \
sort -n | \
cut -d' ' -f5- | \
sed -e 's/^/\./' 

现在我的问题是,上面的命令包括

cut d' ' -f5-

部分给了我这种输出:

....
./RATKING - So It Goes - 2014 [V0]/09. Protein.mp3
./RATKING - So It Goes - 2014 [V0]/08. Puerto Rican Judo.mp3
./RATKING - So It Goes - 2014 [V0]/02. Canal.mp3
./RATKING - So It Goes - 2014 [V0]/05. Remove Ya.mp3
./RATKING - So It Goes - 2014 [V0]/04. So Sick Stories.mp3
./RATKING - So It Goes - 2014 [V0]/06. Eat.mp3
./RATKING - So It Goes - 2014 [V0]/03. Snow Beach.mp3
./RATKING - So It Goes - 2014 [V0]/07. So It Goes.mp3
./RATKING - So It Goes - 2014 [V0]/01. _.mp3
./RATKING - So It Goes - 2014 [V0]/10. Bug Fights.mp3
./RATKING - So It Goes - 2014 [V0]/11. Take.mp3
./Aesop Rock - The Blob (2014) [MP3 320]/01 The Blob.mp3
./The Flaming Lips - 7 Skies H3 (2014) [V0]/06 - Requiem.mp3
./The Flaming Lips - 7 Skies H3 (2014) [V0]/08 - Riot In My Brain!!.mp3
./The Flaming Lips - 7 Skies H3 (2014) [V0]/10 - Can't Let It Go.mp3
./The Flaming Lips - 7 Skies H3 (2014) [V0]/03 - Battling Voices From Beyond.mp3
./The Flaming Lips - 7 Skies H3 (2014) [V0]/02 - Meepy Morp.mp3
./The Flaming Lips - 7 Skies H3 (2014) [V0]/07 - Meepy Morp (Reprise).mp3
./The Flaming Lips - 7 Skies H3 (2014) [V0]/09 - 7 SKIES H3 (Main Theme).mp3
./The Flaming Lips - 7 Skies H3 (2014) [V0]/05 - Metamorphosis.mp3
./The Flaming Lips - 7 Skies H3 (2014) [V0]/04 - In A Dream.mp3
./The Flaming Lips - 7 Skies H3 (2014) [V0]/01 - 7 SKIES H3 (Can't Shut Off My Head).mp3
./G. Love & Special Sauce - 2014 - Sugar/14 - Bad Girl Baby Blues.mp3
./G. Love & Special Sauce - 2014 - Sugar/06 - Sugar.mp3
./G. Love & Special Sauce - 2014 - Sugar/10 - Windshield Wipers.mp3
./G. Love & Special Sauce - 2014 - Sugar/02 - Nite Life.mp3
./G. Love & Special Sauce - 2014 - Sugar/09 - One Night Romance.mp3
./G. Love & Special Sauce - 2014 - Sugar/03 - Good Life.mp3
./G. Love & Special Sauce - 2014 - Sugar/04 - Nothing Else Quite Like Home.mp3
./G. Love & Special Sauce - 2014 - Sugar/05 - Smokin Blues.mp3
./G. Love & Special Sauce - 2014 - Sugar/08 - Saturday Night.mp3
./G. Love & Special Sauce - 2014 - Sugar/13 - Run For Me.mp3
./G. Love & Special Sauce - 2014 - Sugar/07 - Weekend Dance #2.mp3
./G. Love & Special Sauce - 2014 - Sugar/12 - Too Much Month.mp3
./G. Love & Special Sauce - 2014 - Sugar/01 - Come Up Man.mp3
./G. Love & Special Sauce - 2014 - Sugar/11 - Cheating Heart.mp3

这是我想要的方式(部分) - 按照将相册添加到文件系统/ PC的日期排序。但我还想要的是让每张专辑按照歌曲编号01,02,03,04 ......从每个文件夹/专辑中排序,而不是如上所示的无序数字。

有没有人对我如何以不同方式做到这一点有任何建议,以便我能得到理想的结果?

1 个答案:

答案 0 :(得分:0)

您的原始命令有一些冗余 - 您链接的问题需要输出中的日期,而您没有,因此您可以跳过stat输出的某些字段。您也可以使用stat跳过find -printf。这应该工作(部分未经测试,抱歉):

find $1 -type f -iregex '.*\.mp3' -mtime -$2 --printf "%T@~.%h~%f\n" |\
sort -t~ -nk1 -nk3 |\
cut -d~ -f2- |\
tr '~' '/'

find找到相同的文件,然后按以下格式打印出来:

[modified date in seconds since Unix epoch]~.[file directory]~[filename]
ex:
1234512345~./RATKING - So It Goes - 2014 [V0]~09. Protein.mp3

然后我们首先按日期排序,其次按文件名排序(数字,并使用~作为字段分隔符)。最后,我们剥离日期字段,然后用正斜杠替换剩余的~以提供完整的文件路径。

注意:仅当您的文件在文件名的开头都有曲目编号时才会起作用,并且对于文件路径中任何位置~的任何文件也不会给出正确的结果(目录或文件名)。它没有被选中用于任何特殊原因,如果需要,您可以用更合适的角色替换它。字符替换是必需的(而不是使用正斜杠作为排序分隔符),因为(我假设!)每个文件所在的子目录级别可能会有所不同。