【问题标题】:convert images to pdfs in subdirectories将图像转换为子目录中的 pdf
【发布时间】:2014-07-25 22:30:25
【问题描述】:

我有一堆包含图像的子文件夹。我正在尝试使用目录名称作为 pdf 名称将它们递归地转换为 pdf 文件。在一些谷歌搜索的帮助下,我尝试使用我写的这个脚本:

#!/bin/bash

for D in `find . -type d` do
  convert *.jpg ${PWD##*/}.pdf
end

它没有工作。我怎样才能让它工作?

每个文件夹中有几个.JPGs,编号为01-10等。使用convert *.jpg name.pdf将所有图像转换为一个pdf文件。我想编写一个脚本来执行此操作,并使 PDF 文件具有目录名称。

我还希望脚本能够抓取转换后的 pdf 并将其向上移动到父目录中。

【问题讨论】:

    标签: linux bash imagemagick-convert


    【解决方案1】:

    这是使用 img2pdf 的 savanto 答案的一个版本,它比 ImageMagick 更快、无损并且文件大小更小。

    `find . -type d | while read d; do img2pdf "${d}"/*.jp2 --output ./"${d##*/}.pdf"; done`
    

    【讨论】:

      【解决方案2】:

      感谢@savanto 的回答。我根据自己的需要对其进行了一些修改。

      通读目录子目录中的文件。将一种文件类型转换为不同的文件类型。命名文件并将其保存到目录(使用 OSX 10.10,终端 bash-3.2)。

      cd /parent_directory 
      find . -type d | while read d; do mogrify -format png *.eps; done
      find . -name '*.eps' -execdir mogrify -format png {} \;
      

      【讨论】:

        【解决方案3】:

        简单:

        find path/to/images -iname "*.jpg" | xargs -I %this convert %this %this.pdf
        

        非常简单干净!

        【讨论】:

        • 这会将每个 .jpg 文件转换为一个 .pdf 文件。 OP要求将每个目录中的all .jpgs转换为single pdf文件,文件名是目录的名称。
        【解决方案4】:

        while 循环在这里更合适。试试这个:

        find . -type d | while read d; do convert "${d}"/*.jpg ./"${d##*/}.pdf"; done
        
        • find 将返回当前目录下的所有目录。
        • while read d 会将每个目录路径读入变量$d
        • convert ${d}/*.jpg 对目录$d 中的所有.jpg 图片进行转换。
        • ./${d##*/}.pdf 将整个目录路径替换为仅目录名称,追加 .pdf,并确保在父目录中创建 PDF 文件。

        【讨论】:

        • +1。非常好的正则表达式替换扩展。也许使用-iname 并检测jpeg 拼写?
        • @MartinKonecny 谢谢!我喜欢你对-iname 的建议,但看起来 OP 已经更新了要求 =)
        猜你喜欢
        • 2013-02-02
        • 2021-06-27
        • 1970-01-01
        • 2014-12-23
        • 1970-01-01
        • 2021-12-31
        • 1970-01-01
        • 2018-04-07
        • 2016-09-14
        相关资源
        最近更新 更多