Xargs
使用 xargs & convert 批量轉換圖像,如何命名輸出文件?
眾所周知,可以使用以下命令將圖像轉換為單個 pdf(假設圖像文件名的順序正確):
convert *.jpg output.pdf
.但是,當涉及數千張圖像時,這種方法可能會佔用過多的 RAM。另一個想法是分批將圖像轉換為 pdf,然後將生成的 pdf 連接為一個
pdftk
:
pdftk output-*.pdf cat output output.pdf
到目前為止,我嘗試使用以下方法批量轉換圖像
xargs
:
ls *.jpg | xargs -d $'\n' -t -n 100 bash -c 'convert "$@" output.pdf'
它執行良好,只是每次都會
convert
刪除以前的 pdf。問題:有沒有辦法計算批號,並依次生產,例如
output-1.pdf
,…,output-9.pdf
?
如果您能夠換成
xargs
GNUparallel
,那確實會提供一個{#}
包含正在執行的序列號的替換字元串。所以例如給出
$ touch File{001..050}.jpg
然後
$ printf '%s\0' *.jpg | parallel --null -n 5 echo convert {} -o output{#}.pdf convert File001.jpg File002.jpg File003.jpg File004.jpg File005.jpg -o output1.pdf convert File006.jpg File007.jpg File008.jpg File009.jpg File010.jpg -o output2.pdf convert File011.jpg File012.jpg File013.jpg File014.jpg File015.jpg -o output3.pdf convert File016.jpg File017.jpg File018.jpg File019.jpg File020.jpg -o output4.pdf convert File021.jpg File022.jpg File023.jpg File024.jpg File025.jpg -o output5.pdf convert File026.jpg File027.jpg File028.jpg File029.jpg File030.jpg -o output6.pdf convert File031.jpg File032.jpg File033.jpg File034.jpg File035.jpg -o output7.pdf convert File036.jpg File037.jpg File038.jpg File039.jpg File040.jpg -o output8.pdf convert File041.jpg File042.jpg File043.jpg File044.jpg File045.jpg -o output9.pdf convert File046.jpg File047.jpg File048.jpg File049.jpg File050.jpg -o output10.pdf