将当前目录中的每个pdf转换为png

I L*_*ode 20 bash imagemagick

我想写一个bash脚本把.pdf当前目录下的每个文件都转换成一个.png文件。例如:

$ls .
a.pdf b.pdf
$./pdf2png.sh
Converting pdfs to pngs
a.pdf -> a.png
b.pdf -> b.png
Run Code Online (Sandbox Code Playgroud)

这是我最好的尝试:

#!/bin/bash
convert -verbose -density 500 -resize '800' a.pdf a.png
convert -verbose -density 500 -resize '800' b.pdf b.png
Run Code Online (Sandbox Code Playgroud)

ter*_*don 20

如果您有非常奇怪的名称,包含换行符或反斜杠等的名称,您可以执行以下操作:

find . -type f -name '*.pdf' -print0 |
  while IFS= read -r -d '' file
    do convert -verbose -density 500 -resize 800 "${file}" "${file%.*}.png"
  done
Run Code Online (Sandbox Code Playgroud)

这应该能够处理你扔给它的任何东西。

使用的技巧:

  • find ... -print0: 导致find打印由空字符分隔的结果,让我们处理换行符。
  • IFS= :这将禁用分词,需要处理空格。
  • read -r: 禁用反斜杠转义字符的解释,以处理包含反斜杠的文件。
  • read -d '': 将记录分隔符设置为空字符,以处理 find 的输出并正确处理带有换行符的文件名。
  • ${file%.*}.png: 使用 shell 的内置字符串操作功能来删除扩展名。

  • 或者以可移植的方式执行(POSIX)并仍然处理任何特殊字符:`find . -type f -name '*.pdf' -exec sh -c 'for f 进行转换 -verbose -密度 500 -resize 800 "$f" "${f%.pdf}.png"; done' find-sh {} +` 有关说明和背景,请参阅 https://unix.stackexchange.com/a/321753/135943。 (2认同)

mkc*_*mkc 15

您可以for按如下方式使用 bash循环:

#!/bin/bash
for pdfile in *.pdf ; do
  convert -verbose -density 500 -resize '800' "${pdfile}" "${pdfile%.*}".png
done
Run Code Online (Sandbox Code Playgroud)


don*_*sti 8

您可以使用mogrify批量转换和调整.pdf当前目录中的所有s 的大小:

mogrify -verbose -density 500 -resize 800 -format png ./*.pdf
Run Code Online (Sandbox Code Playgroud)

当使用不同的format(在这种情况下-format png)时,原始.pdfs 保持不变,具有相同名称的输出文件,但扩展名将更改为format.