为什么这个bash脚本启动vlc两次?

时间:2016-06-05 15:26:28

标签: bash vlc

这是我用于启动带有动态播放列表的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输出中的所有文件?

为什么会有第二个实例来完成剩下的工作?

1 个答案:

答案 0 :(得分:2)

您可以将最大字符数作为命令行参数传递。这就是xargs的用途:将输入拆分为多个块,如果它们的组合大小太大,则将它们传递给单独的程序调用。

正如man xargs所说:

  

构建命令的命令行,直到达到系统定义的限制(除非使用-n-L选项)。指定的      命令将根据需要多次调用以使用该列表      输入项目。一般来说,调用的次数会少很多      命令比输入中的项目。

在您的情况下,在两个vlc调用中处理了数千个输入项。