【问题标题】:Bash To Convert PDF Files In Multiple SubdirectoriesBash 转换多个子目录中的 PDF 文件
【发布时间】:2018-10-18 19:19:14
【问题描述】:

我正在尝试将 2,432 个子目录(每个文件夹一个 PDF 文件)中的 PDF 文件转换为 HTML 文件。

例如,我尝试了一些变体

find . -type d | while read d; for file in *.pdf; do pdftohtml -c -i -s "$file"; done

for f in ./*/*.pdf; do pdftohtml -c -i -s "$file"; done

没有任何成功。我也尝试了其他一些方法,但是这次我什么都做不了。

我知道部分代码有效,因为我可以将多个 PDF 文件放在一个文件夹中并使用

for file in *.pdf; do pdftohtml -c -i -s "$file"; done

以递归方式将该文件夹中的所有文件转换为 HTML。

有没有一种方法可以搜索每个文件夹并使用 bash 脚本转换每个文件?或者这是我必须一次做一个文件夹的事情?

【问题讨论】:

  • 您希望生成的html文件与源pdf文件在同一目录中吗?
  • 当然!我希望将转换后的文件与 PDF 放在同一个文件夹中。抱歉,我忘了在上面加上。

标签: linux bash pdf type-conversion


【解决方案1】:

您可以使用带有选项-execfind 命令来触发转换:

find /path/to/your/root/pdf/folder -type f -name "*.pdf" -exec bash -c 'pdftohtml -c -i -s "$1"' _ {} \;

pdftohtml 对找到的每个 pdf 文件执行。注意{}代表pdf文件。

【讨论】:

  • 使用-exec bash ...-exec pdftohtml ... {} 有什么优势吗?
  • @Socowi 在这种情况下可能不需要,但在需要执行 bash 内置命令的一般情况下,bash -c 是必需的。
  • 好吧,这就像一个冠军!为了学习目的,我想使用其他一些解决方案,但这只是飞快地通过并转换了每个文件夹中的所有内容。非常感谢!
【解决方案2】:

您的第二个命令似乎是正确的。只是一个小错误

for f in ./*/*.pdf; do pdftohtml -c -i -s "$file"; done

您写了for f,但使用了$file。试试

for f in ./*/*.pdf; do pdftohtml -c -i -s "$f"; done

【讨论】:

    【解决方案3】:

    使用:

    find . -name \*.pdf -exec pdftohtml -c -i -s {} \;
    

    【讨论】:

    • 我也想试试这个。转义 *.pdf 的目的是什么?我仍在学习 bash、正则表达式等,并且认为我还没有遇到任何使用转义的东西。这使它变得非常简短和干净!
    • 好吧,我过去在处理一些文件时遇到了一些麻烦,所以我逃脱了。我们可以使用“*.pdf”而不用转义。
    • 查看更多关于转义的信息:stackoverflow.com/questions/15783701/…
    • 知道了。许多年前,一位 PHP 导师教会了我预防的习惯(现在几次击键就可以让你免于以后的一百万。)似乎也适用于这里。感谢您提供信息和链接!
    猜你喜欢
    • 2011-09-02
    • 2016-08-03
    • 1970-01-01
    • 1970-01-01
    • 2021-05-21
    • 1970-01-01
    • 2022-11-28
    • 1970-01-01
    • 2014-07-25
    相关资源
    最近更新 更多