我可以使用 ImageMagick 创建 PDF 第一页的缩略图:
convert -thumbnail x80 95.pdf[0] thumb_95.png
这工作正常并生成一个拇指_95.png文件。
我已经尝试使用 xargs 进行“查找”的几种排列,但我无法使用组合来在文件夹中与源 PDF 一起创建缩略图。
PDF 位于以 UUID 命名的文件夹中,例如:
/511017a7-67fc-4897-80c1-0d42ac100b68/415.pdf
/511015bc-e0a8-4ab7-ba29-0ce9ac100b68/122.pdf
我所需的结果是:
/511017a7-67fc-4897-80c1-0d42ac100b68/415.pdf
/511017a7-67fc-4897-80c1-0d42ac100b68/thumb_415.png
/511015bc-e0a8-4ab7-ba29-0ce9ac100b68/122.pdf
/511015bc-e0a8-4ab7-ba29-0ce9ac100b68/thumb_122.png
任何有关以递归方式对所有 *.pdf 进行此转换的最佳方法的帮助将不胜感激!
答案1
棘手的部分是不要将表单的文件名testfile.pdf.png
作为输出。几年前,我遇到了同样的问题,并用这个帮助脚本解决了它(稍作修改):
#!/bin/bash
SRCFRM=pdf
TGTFRM=png
FILE=$1
NEWFILE=$(echo $FILE | sed "s:$SRCFRM\$:$TGTFRM:")
convert -thumbnail x80 $FILE[0] $NEWFILE
将其存储在某个地方,例如在您的主目录中,然后像这样使用它:
find /path -name '*.pdf' -exec /path/to/converthelper.sh {} \;
答案2
你想要
递归到所有 PDF:
- 启用 globstar,使用
shopt -s globstar
. - 使用它生成
*.pdf
当前目录下所有文件的列表:**/*.pdf
创建一个循环遍历所述文件:
for filename in **/*.pdf do something done
- 启用 globstar,使用
现在,您想要对文件执行某些操作:某些内容是
convert -thumbnail x80 95.pdf[0] thumb_95.png
.有几种方法:我通常使用basename
,在这种情况下您需要$(dirname $filename)/$(basename $filename .pdf).png
,但另一种有趣(且更简单)的方法是使用bash 的字符串操作工具:.pdf
从文件名末尾删除:${filename%.pdf}
- 添加
.png
:${filename%.pdf}.png
最后,我们可以将它们粘合在一起(不要忘记这需要 globstar, shopt -s globstar
):
for filename in **/*.pdf
do
convert -thumbnail x80 $filename[0] ${filename%.pdf}.png
done
答案3
尝试这个:
find /source/directory -name "*.pdf" -exec \ sh -c 'convert -thumbnail x80 {} $(dirname {})/thumb_$(basename {})' \;
我不得不稍微修改一下:
find /source/directory -name "*.pdf" -exec \ sh -c 'convert -thumbnail x80 {} $(dirname {})/thumb_$(basename {} .pdf)'.png \;
要让基本名称去掉文件扩展名,然后附加 .png。
感谢所有的答案。这对我来说效果很好!