多线程查找执行

Sul*_*end 7 find xargs

是否有某种机制可以使 find 与 -exec 使用多个作业?

让我们使用这个命令作为例子

find ./* -exec flac --best {} \;

有没有什么方法可以设置并发命令的数量,-exec以便比以下解决方案更容易运行:

运行find ./*并将结果保存到文件/通过管道将它们用于另一个命令,将其分成 16 个部分(或任意数量的线程),然后在这些部分上运行命令?

Sul*_*end 8

如果使用 xargs 则可以设置worker的数量

find . -type f -print0|xargs -0 -P 16 -I % opusenc --bitrate 256 % %.opus
Run Code Online (Sandbox Code Playgroud)
xargs -P 16
Run Code Online (Sandbox Code Playgroud)

(因为我很难在网上找到更多详细信息或理解手册页部分)

它一次对 16 个输入执行您的命令,或者您传递给 -P 的输入数。


对于我的命令,我试图将 cd 音乐文件 [艺术家/专辑/音乐文件] 的组织文件夹转换为作品。这是一个复制的文件夹,所以我想删除原始文件夹。所以比我使用的命令更好的命令是

find . -type f -print0|xargs -0 -P 16 -I % sh -c 'opusenc --bitrate 256 % %.opus && rm %'
Run Code Online (Sandbox Code Playgroud)

转换后,原始文件将被删除。

  • 有点晚了,但是为了您的“更好”命令,请考虑将分号更改为“&&”,这样您就不会四处删除无法转换的源文件! (2认同)