如何通过在目录及其子目录中递归搜索来随机播放.mp3歌曲?

时间:2009-06-26 07:19:17

标签: linux

一旦我在包含.mp3文件的目录中,我就可以使用

随机播放歌曲

mpg123 -Z * .mp3

但是,如果我想递归搜索目录及其子文件夹中的.mp3文件并随机播放,我尝试了以下命令,但它不起作用。

mpg123 -Z<(find / media -name * .mp3)

(find / media -name * .mp3),执行时会给出/ media及其子目录中的所有.mp3文件。

10 个答案:

答案 0 :(得分:9)

mpg123 -Z $(find -name "*.mp3")

$(...)表示执行命令并将输出粘贴到此处。

另外,要绕过上面提到的命令行长度限制,请尝试:

mpg123 -Z $(find -name“* .mp3”| sort --random-sort | head -n 100)

编辑:抱歉,试试:

find -name "*.mp3" | sort --random-sort| head -n 100|xargs -d '\n' mpg123

这应该正确处理空格,假设您没有嵌入换行符的文件名。

它将半随机置换您的MP3列表,然后选择随机列表的前100个,然后将其传递给mpg123。

答案 1 :(得分:1)

反引号。

mpg123 -Z `find /media -name \*.mp3`

虽然如果你有很多文件,但可能会遇到命令行长度限制。

答案 2 :(得分:1)

这样的事情会起作用吗?

find /media -name *.mp3 -print0 | xargs -0 mpg123 -Z

答案 3 :(得分:1)

以下工作正常。

find / media -name“* .mp3”| xargs -d'\ n'-n10 mpg123 -Z。

按'-n'选项,我们可以提供不。单个调用命令的参数。

即使在我关闭我写这个命令的终端后,歌曲继续播放,因为进程mpg123变成孤儿并继续运行。

devikasingh @兴趣:〜$ ps -e | grep mpg123

                   7239 ?        00:00:01 mpg123

ps -f 7239

UID PID PPID C STIME TTY STAT TIME CMD

1000 7239 1 0 15:21? S 0:01 mpg123 -Z / media / MUSIC& PIC / audio_for_you / For You.mp3 / media / MUSIC& PIC / audio_for_you / In My Place.mp3 /

答案 4 :(得分:1)

同时zshbash 4.0

mpg123 -Z **/*.mp3

(Bash用户可能需要先shopt -s globstar。)

答案 5 :(得分:0)

感谢您的建议,通过使用它们,我能够创建以下脚本:

#!/bin/bash song=$(zenity --width=360 --height=320 --title "Select Folder" --file-selection --directory $HOME) find "$song" -name "*.mp3" | sort --random-sort | head -n 100 | xargs -d '\n' mpg123

答案 6 :(得分:0)

使用xargs可能更好,但我在Red Hat的bash中使用while循环。

find . -iname "*.mp3" -print | sort -R --random-source=/dev/urandom | while IFS= read -r filename; do play "$filename"; done

唯一的问题是杀人很烦人。要杀死它,你必须按住Ctrl-C直到while循环被杀死。

  • ... 执行 ... 完成循环排序输出中的每个字段。< / LI>
  • IFS 描述了字段分隔符。
  • IFS = 使每一行成为一个字段。
  • 读取将当前字段复制到 filename 变量中。
  • -r 选项会删除反斜杠处理,这在Linux上似乎不是必需的。
  • 播放是一种使用 sox 进行播放的简单方法。

答案 7 :(得分:0)

我找到了这个和恕我直言,比其他解决方案更清洁。我没有拥有这些学分,他们会去网站所有者。

find $HOME/mp3s -iname '*.mp3' | mpg123 -Z -@ -

https://dannyman.toldme.com/2004/12/28/howto-mpg123-random-mp3s/

上找到
  

我刚刚从name更改为iname,因为有时文件可以加盖大小...

答案 8 :(得分:0)

我几乎尝试了所有操作,并且通过管道运行mpg123时,它返回以下错误:“无法获取终端属性”,并且我无法使用终端控制键。

我发现播放由命令find找到的文件列表并能够使用终端控制键的唯一方法是(我的目录和文件带有空格):

find /media -type f -iname "*.mp3" > /tmp/mp3list
mpg123 -CZvv -@ /tmp/mp3list

如果您使用$(find / media -type f -iname“ * .mp3”),看起来mpg123使用空格作为分隔符,并且在我的情况下不起作用,因为我在所有目录名称中都有空格所有文件名。

这是一个脚本(playmp3.sh),仅在文件不存在时才执行查找:

#!/bin/sh
if ! [ -f /tmp/mp3list ]; then
  find /media -type f -iname "*.mp3" > /tmp/mp3list
fi
mpg123 -CZvv -@ /tmp/mp3list

答案 9 :(得分:-1)

我的库位于单独的分区中,并且在我的根目录中,我有这个小脚本,它也随机播放前一首歌,我喜欢40 gb的音乐,所以它们几乎永远不会重复。

!/ bin / sh

cd“ / media / $ USER / 7789f483-c7bf-46bc-9293-e8e05dd62199 / musik /” mpg123 -Z / / *。mp3;