我想迭代一个视频列表,并使用脚本将它们从.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线程的方法,也许是一个可以指导我的重复票据?
答案 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 {} \;