首先,抱歉,我的英语不好:我不是英国人/美国人。
这是我的问题。我有一个名为 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/073和http://mywiki.wooledge.org/BashFAQ/100有关 bash 中的参数扩展和字符串操作的更多信息。
编辑:再次阅读问题,我发现您想要 pdf 父目录中的 jpeg,因此我也会对此进行必要的修改:
for file in pdf/*.pdf; do
basename=${file##*/}
convert "$file[0]" "./${basename%.pdf}.jpg"
done