这是我使用动态播放列表启动vlc的脚本
#!/bin/bash
find "/path/to/music" -type f -path "*$1*" -print0 | xargs -0 vlc
当不带参数运行时,vlc 将启动并播放目录树中的文件。
然后我关闭 vlc,另一个实例启动。
如果我将每个实例中的播放列表与
find "/path/to/music" -type f -path "**"
事实证明,第一个实例获得了大部分播放列表,第二个实例获得了其余部分。拆分是确定性的。以下是上述命令输出的摘录:
...
/path/to/music/Liz Carroll/Lost in the Loop/08 - The Crow in the Sun.ogg
/path/to/music/Liz Carroll/Lost in the Loop/02 - The Champaign Jig Goes To Columbia, Pat and Al's.ogg
/path/to/music/Liz Carroll/Lost in the Loop/04 - The Golden Legs, The Flogging Reel.ogg
/path/to/music/Liz Carroll/Lost in the Loop/09 - The Ugly Duckling.ogg
/path/to/music/Liz Carroll/Lost in the Loop/03 - See It There, Con Cassidy's.ogg
/path/to/music/Liz Carroll/Lost in the Loop/13 - The Didda, Fly and Dodger.ogg
/path/to/music/Eliza Carthy/Dreams of Breathing Underwater/08 Little Bigman.mp3
/path/to/music/Eliza Carthy/Dreams of Breathing Underwater/07 Lavenders.mp3
...
拆分始终发生,以便最后三个文件是第二个实例播放列表中的第一个文件。那里似乎没有任何技巧角色。撇号的文件名按原样显示在 VLC 播放列表中,似乎没有任何遗漏,VLC 输出没有错误。
为什么 vlc 的第一个实例没有获取 find
输出中的所有文件?
为什么会有第二个实例得到其余的?
可以作为命令行参数传递的最大字符数。这就是xargs
的用途:将输入拆分为多个块,如果它们的组合大小太大,则将它们传递给单独的程序调用。
正如man xargs
所说:
命令的命令行将一直构建到达到系统定义的限制(除非使用
-n
和-L
选项)。 指定的 命令将根据需要多次调用以用完列表 的输入项。 通常,对 命令比输入中有项目。
在您的例子中,在两次vlc
调用中处理了数千个输入项。