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を使用しています。 TIFFに変換する必要があるPDFが10000個あります。

答え1

1 つの方法は、すべてのアクションのシェル入力を作成することです。

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

次に、parallel -j NNが同時に実行するジョブの数である場所にパイプします。

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展開し、現在のパス名のデフォルト名にも拡張し、ファイル名のサフィックスを削除します。したがって、現在のファイル名があればwhileになります。'{}''{/.}'./file-02.pdf'{}''./file-02.pdf''{/.}'file-02

可能なファイル名を処理parallelするには、nulで区切られたパス名を使用します。printfこの内容は で--null読みますparallel

宛先パス名を一部変更しました。実際に使用したいものに合わせて調整する必要があります。

関連情報