如何在 Linux 命令行上递归创建 PDF 缩略图

如何在 Linux 命令行上递归创建 PDF 缩略图

我可以使用 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:

    1. 启用 globstar,使用shopt -s globstar.
    2. 使用它生成*.pdf当前目录下所有文件的列表:**/*.pdf
    3. 创建一个循环遍历所述文件:

      for filename in **/*.pdf
      do
          something
      done
      
  • 现在,您想要对文件执行某些操作:某些内容是convert -thumbnail x80 95.pdf[0] thumb_95.png.有几种方法:我通常使用basename,在这种情况下您需要$(dirname $filename)/$(basename $filename .pdf).png,但另一种有趣(且更简单)的方法是使用bash 的字符串操作工具:

    1. .pdf从文件名末尾删除:${filename%.pdf}
    2. 添加.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。

感谢所有的答案。这对我来说效果很好!

相关内容