有关“高级” shell 脚本的帮助 | 如何创建 pdf 的图像预览

有关“高级” shell 脚本的帮助 | 如何创建 pdf 的图像预览

首先,抱歉,我的英语不好:我不是英国人/美国人。

这是我的问题。我有一个名为 pdf 的文件夹,里面有很多 pdf 文件。我还有另一个名为 thumbnail 的文件夹,它是空的。我想为每个 pdf 创建 jpg 图像预览,以便在我的 HTML 网页中将它们用作 pdf 的预览。

为此,我使用了一款名为 IMAGEMAGICK 的软件。我尝试将代码放入我的 PHP 文件中以实现目的,但它不起作用。正如您所理解的,我使用 apache、mysql 创建了一个小型搜索引擎,用于本地(离线)搜索 pdf。现在我想添加 pdf 第一页的“预览”。相反,它通过 bash 命令行工作,代码如下:

convert pdf/name_of_the_file_pdf.pdf[0] name_of_the_imagefile.jpg

(零代表图像取自 pdf 的第一页)我怎样才能编写一个脚本,获取每个 pdf 文件的名称并将其放入该代码中???为了列出所有文件,我做了

ls >pdf

但是由于我所知甚少,我无法进一步了解....一些 pdf 的名称包含空格....这是个问题吗?

PDF 文件太多了,我无法完成输入每个名字的任务,这不是一个好又聪明的工作!!!!提前谢谢大家了!

答案1

任何使用该ls命令的解决方案最终都会失败,但不要担心;bash 可以安全地处理任何和所有文件名,而无需使用外部命令(如ls)来“列出”它们。

要从当前目录中的每个 filename.pdf 创建 filename.jpg,您可以执行以下操作:

for file in ./*.pdf; do
    convert "$file[0]" "${file%.pdf}.jpg"
done

您也可以在一行中完成此操作

for file in ./*.pdf; do convert "$file[0]" "${file%.pdf}.jpg"; done

双引号(")非常重要,它可以避免参数扩展导致的单词分割和路径名扩展。

$file${file%.pdf}称为参数扩展。参见http://mywiki.wooledge.org/BashFAQ/073http://mywiki.wooledge.org/BashFAQ/100有关 bash 中的参数扩展和字符串操作的更多信息。

编辑:再次阅读问题,我发现您想要 pdf 父目录中的 jpeg,因此我也会对此进行必要的修改:

for file in pdf/*.pdf; do
    basename=${file##*/}
    convert "$file[0]" "./${basename%.pdf}.jpg"
done

相关内容