将大量文本文件转换为 pdf,并根据头文件命名

将大量文本文件转换为 pdf,并根据头文件命名

知道“如何从文本转换为.pdf”已经在这里得到了很好的回答关联和这里关联,我正在寻找更具体的东西:

使用 Claws-Mail [网站] 和一个插件 [RSSyl] 为了阅读 RSS 提要,我收集了很多文本文件。我想将这些转换为 .pdf 文件。

问题:文件夹内的文件编号为 [1, 2, …, 456]。每个提要都有自己的文件夹,但里面有“只是”编号的文件。每个文件都包含一个标头[后跟消息内容]:

Date: Tue,  5 Feb 2013 19:59:53 GMT
From: N/A
Subject: Civilized Discourse Construction Kit
X-RSSyl-URL: http://www.codinghorror.com/blog/2013/02/civilized-discourse-construction-kit.html
Message-ID: <http://www.codinghorror.com/blog/2013/02/civilized-discourse-construction-kit.html>
Content-Type: text/html; charset=UTF-8

<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<base href="http://www.codinghorror.com/blog/2013/02/civilized-discourse-construction-kit.html">
</head><body>
<p>URL: <a href="http://www.codinghorror.com/blog/2013/02/civilized-discourse-construction-kit.html">http://www.codinghorror.com/blog/2013/02/civilized-discourse-construction-kit.html</a></p>
<br>
<!-- RSSyl text start -->

问题.pdf:一种将每个文件转换为文件并根据下面给出的名称重命名它的方法主题。超级棒的是这样转换和重命名:

"folder.name"_"date"_"file name"每个信息均取自标头数据。由于有几百个文件,我正在寻找一种批处理方式。

文件已html格式化,但没有.htm[l]后缀。

答案1

如果您有一个相对简单的文件树,其中只有一层目录,并且每个目录包含文件列表但没有子目录,您应该能够执行类似的操作(您可以将其直接粘贴到您的文件中)终端并点击Enter):

for dir in *; do    ## For each directory
 if [ "$(ls -A "$dir")" ]; then  ## If the dir is not empty
   for file in "$dir"/*; do      ## For each file in $dir
    i=0;                         ## initialize a counter
    ## Get the subject
    sub=$(grep ^Subject: "$file" | cut -d ':' -f 2-);
    ## get the date, and format it to MMDDYY_Hour:Min:Sec
    date=$(date -d "$(grep ^Date: $file | cut -d ':' -f 2-)" +%m%d%y_%H:%M:%S);
    ## the pdf's name will be <directory's name> _ <date> _ <subject>
    name="$dir"_"$date"_"$sub";
    ## if a file of this name exists
    while [ -e "$dir/$name".pdf ]; do
      let i++;                       ## increment the counter
      name="$dir"_"$date"_"$sub"$i;  ## append it to the pdf's name
    done;
    wkhtmltopdf "$file" "$dir"/"$name".pdf; ## convert html to pdf
  done
 fi
done

笔记

  • 该解决方案需要wkhtmltopdf:

    使用 webkit 渲染引擎和 qt 将 html 转换为 pdf 的简单 shell 实用程序。

    在基于 Debian 的系统上,您可以使用以下命令安装它

    sudo apt-get install wkhtmltopdf
    
  • 它假设有没有文件在顶级目录中和仅需要所需的 html 文件在所有子目录中。

  • 它可以处理包含空格、换行符和其他非正统字符的文件和目录名。

  • dir1/foo给定一个包含您发布的示例内容的文件,它将创建一个名为的文件dir1/dir1_020513_20:59:53_Civilized Discourse Construction Kit10.pdf

答案2

您始终可以使用页面标题进行命名约定,因此它应该是唯一的。

给定包含地址列表的文件,以下是一行:

while read url; do wkhtmltopdf $url "$(curl -s $url | grep -o "<title>[^<]*" | tail -c+8).pdf"; done < urls.lst

urls.lst包含 url 列表的文件在哪里。

相关内容