如何在bash脚本中迭代调用long函数

时间:2016-09-17 08:29:23

标签: bash shell

我想迭代一个视频列表,并使用脚本将它们从.avi转换为.mp4,每个文件大约需要1分钟。

find . -name "*.avi" -type f | while read FILE; do
  HandbrakeCLI [flags] $FILE # execute 30 sec ~ 2 min function here
done

问题是,这似乎只在第一个文件上运行,就像连续调用是块一样。

如何生成异步线程来处理每种情况?

这是另一个试图解决ssh新进程的问题的副本,解决方案基于ssh可用的参数。 我想要一种在迭代器中生成新的bash线程的方法,也许是一个可以指导我的重复票据?

1 个答案:

答案 0 :(得分:2)

假设您的问题是HandbreakCLI脚本只被调用一次,根本原因可能是它的行为有所不同,具体取决于标准输入是否是终端,或者它是否会耗尽其标准输入。在这种情况下,这是一种从find

中克服问题的方法
find . -type f -name  "*.avi" -exec sh -c 'FILE="$1" HandbrakeCLI &' sh {} \;

要跟踪此命令的运行情况,可以采用以下方式进行修改:

find . -type f -name  "*.avi" -exec sh -c 'set -x; FILE="$1" HandbrakeCLI &' sh {} \;