如何并行运行 PDF 到 TIFF 转换?

如何并行运行 PDF 到 TIFF 转换?

我这里有这个命令,用于使用 .bat 将 PDF 文档(前 2 页)批量转换为 TIFF 文件pdftoppm

目标是将 TIFF 图像放入其自己的文件夹中,文件夹名称与原始 PDF 文件名匹配。

for file in *.pdf; do
    pdftoppm -tiff -f 1 -l 2 "$file" ~/tiff/directory/"$file"/"$file"
done

如何pdftoppm同时运行该命令的 8 个实例?

我正在运行 Debian。我有 10000 个 PDF 需要转换为 TIFF。

答案1

一种方法是为所有作业创建 shell 输入:

for file in *.pdf
do
    printf 'pdftoppm -tiff -f 1 -l 2 "%q" ~/tiff/directory/"%q"/"%q"' \
        "$file" "$file" "$file"
done

然后通过管道将其传递到parallel -j N其中 N 是要同时运行的作业数:

for file in *.pdf
do
    printf 'pdftoppm -tiff -f 1 -l 2 "%q" ~/tiff/directory/"%q"/"%q"' \
        "$file" "$file" "$file"
done |
parallel -j 8

答案2

使用 GNU parallel

printf '%s\0' ./*.pdf |
parallel --null --jobs 8 \
    pdftoppm -tiff -f 1 -l 2 '{}' ~/tiff/directory/'{/.}'/'{/.}'.tiff

上面的命令管道将在当前目录中pdftoppm匹配的所有文件名上运行您的命令。*.pdf扩展'{}'为当前路径名,同时'{/.}'扩展为当前路径名的基名,并删除文件名后缀。因此,如果当前文件名是./file-02.pdf,那么将'{}''./file-02.pdf'while 。'{/.}'file-02

我使用parallelnul 分隔的路径名来printf处理任何可能的文件名。这些由--null读取parallel

我对目标路径名做了一些改动。您应该将其调整为您实际想要使用的内容。

相关内容