这是我用于启动带有动态播放列表的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
输出中的所有文件?
为什么会有第二个实例来完成剩下的工作?
答案 0 :(得分:2)
您可以将最大字符数作为命令行参数传递。这就是xargs
的用途:将输入拆分为多个块,如果它们的组合大小太大,则将它们传递给单独的程序调用。
正如man xargs
所说:
构建命令的命令行,直到达到系统定义的限制(除非使用
-n
和-L
选项)。指定的 命令将根据需要多次调用以使用该列表 输入项目。一般来说,调用的次数会少很多 命令比输入中的项目。
在您的情况下,在两个vlc
调用中处理了数千个输入项。