Answers:
如果您的名字确实很奇怪,包含换行符或反斜杠之类的名称,则可以执行以下操作:
find . -type f -name '*.pdf' -print0 |
while IFS= read -r -d '' file
do convert -verbose -density 500 -resize 800 "${file}" "${file%.*}.png"
done
那应该能够处理几乎所有您扔给它的东西。
使用的技巧:
find ... -print0
:导致find
以空字符分隔的结果打印结果,让我们处理换行符。IFS=
:这将禁用处理空格所需的分词。read -r
:禁用反斜杠转义符的解释,以处理包含反斜杠的文件。read -d ''
:将记录定界符设置为空字符,以处理find的输出并正确处理带有换行符的文件名。${file%.*}.png
:使用外壳程序的内置字符串操作功能删除扩展名。find . -type f -name '*.pdf' -exec sh -c 'for f do convert -verbose -density 500 -resize 800 "$f" "${f%.pdf}.png"; done' find-sh {} +
有关说明和背景,请参见unix.stackexchange.com/a/321753/135943。
-printf
,因此您只需要将其替换为`-exec printf'%s \ 0'{} +`即可。
您可以mogrify
用来批量转换并调整.pdf
当前目录中所有s的大小:
mogrify -verbose -density 500 -resize 800 -format png ./*.pdf
当使用其他format
(在这种情况下-format png
)时,原始.pdf
s保持不变,输出文件具有相同的名称,但扩展名将更改为所指定的扩展名format
。
如果不限于使用bash,则可以使用python脚本将.pdf
当前目录中的所有文件转换为高分辨率.png
图像。可以将其修改为其他输入/输出图像类型,或者将用作其他参数convert
。
#! /usr/bin/env python
import os
def main():
dir_list = os.listdir('.')
for full_file_name in dir_list:
base_name, extension = os.path.splitext(full_file_name)
if extension == '.pdf': # then .pdf file --> convert to image!
cmd_str = ' '.join(['convert',
'-density 400',
full_file_name,
base_name + '.png'])
print(cmd_str) # echo command to terminal
os.system(cmd_str) # execute command
if __name__ == '__main__':
main()