Shell-Script

如何並行執行 PDF 到 TIFF 的轉換?

  • November 5, 2021

我在這裡有這個命令,用於將 PDF 文件(前 2 頁)批量轉換為使用pdftoppm.

目標是將 TIFF 圖像放入其自己的文件夾中,文件夾名稱與原始 PDF 文件名匹配。

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

如何同時執行 8 個pdftoppm命令實例?

我正在執行 Debian。我有 10000 份要轉換為 TIFF 的 PDF。

一種方法是為所有作業創建 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

使用 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使用以空分隔的路徑名 fromprintf來處理任何可能的文件名。這些--null由 by讀取parallel

我對目標路徑名應該是什麼採取了一些自由。您應該將其調整為您實際想要使用的內容。

引用自:https://unix.stackexchange.com/questions/676182