我正在使用Github中的html2text
,可以在其中使用.html
在文件夹中的所有for file in *.html; do html2text "$file" > "$file.txt"; done
文件上运行它,但这有点慢。如何在所有.html
文件上并行使用html2text?
答案 0 :(得分:1)
原始答案是:
for file in *.html
do
html2text "$file" > "$file.txt" &
done
命令末尾的&符号告诉bash将命令放在后台并将控件返回到调用位置。
不确定会否对1000个文件有效,因为它将为每个文件产生一个新进程。
但是,由于OP要求它可以处理数百万个文件,因此这显然是不可行的,因为它会产生数百万个后台进程,并有可能使计算机挂起。
上面的答案似乎立即为您处理100个文件的原因,是因为您立即获得了命令提示符。但是,这不是并不意味着该工作已经完成,因为即使您可以同时执行其他操作,所有这些后台过程也可能仍在工作直到完成。
从理论上讲,您可以将文件列表分成多个块,然后逐个工作地进行工作,但是,在测试这种方法之后,我认为最终结果不会比并行处理快得多。
因此,根据您必须处理的文件数,我建议根据您自己的发现并行运行,也许可以通过大量调整并行作业的数量来实现。
所以这样的事情应该起作用:
find . -type f -name \*html > FLIST
parallel --a FLIST -j 1000 'html2text {} > {.}.txt'
注意,这是OP的html2text的Python版本的语法。对于使用例如的选项。 Ubuntu发行版提供了html2text二进制软件包,请参见答案的先前编辑。
这将在1000个并行文件的块中执行html,并且不使用管道(有时会大大降低速度)。
如果这太慢了,请尝试将-j增加到10000-但是您会遇到硬件/操作系统的局限性,即始终产生10000个并行进程。
答案 1 :(得分:0)
对于处于类似情况的其他人,使用parallel
可以将时间减少一半以上。