使用脚本在linux中结合多个pdf?

时间:2009-08-09 19:33:12

标签: linux scripting

我想从X网站保存/下载pdf,然后将所有这些pdf合并为一个,这样我就可以很容易地一次看到所有这些pdfs。

我做了什么,

  1. 从网站

    获取pdf

    wget -r -l1 -A.pdf --no-parent http://linktoX

  2. 将pdf合并为一个

    gs -dNOPAUSE -sDEVICE = pdfwrite -sOUTPUTFILE = Combined _ date +%F。pdf -dBATCH file1.pdf file2.pdf file3.pdf

  3. 我的问题是,我想在一个脚本中自动完成整个过程,所以我不必每天都这样做。这里每天都会在X中添加新的pdf。

    那么,如何在不提供所有pdf的完整列表的情况下执行上面的第2步,我尝试在第2步中执行file*.pdf;但它以随机顺序组合了所有pdf。

    接下来的问题是,文件* .pdf的总数每天都不一样,有时5个pdf有时10个......但是好的是它命名为file1.pdf file2.pdf ...

    所以,我需要一些帮助来完成上面的步骤2,这样所有的pdf都按顺序组合,我不必明确给出每个pdf的名称

    感谢。

    更新: 这解决了问题

    pdftk `ls -rt kanti*.pdf` cat output Kanti.pdf
    

    我做了ls -rt,因为首先下载了file1.pdf,然后是file2.pdf等等......只是做了ls -t把file20.pdf放在了开头,而file1.pdf放在了最后......

3 个答案:

答案 0 :(得分:3)

我过去也使用过pdftk,效果很好。

要按数字顺序列出文件,您可以通过执行以下操作来指示sort忽略文件名的前$ n - 1个字符:

ls | sort -n -k 1.$n

所以如果你有文件* .pdf:

$ ls | sort -n -k 1.5
file1.pdf
file2.pdf
file3.pdf
file4.pdf
file10.pdf
file11.pdf
file20.pdf
file21.pdf

答案 1 :(得分:2)

之前我曾使用pdftk进行此类连接,因为Debft / Ubuntu可以随时使用pdftk。

答案 2 :(得分:1)

您可以执行以下操作:

GSCOMMAND="gs -dNOPAUSE -sDEVICE=pdfwrite -sOUTPUTFILE=Combined_date +%F.pdf -dBATCH"
FILES=`ls file*.pdf | sort -n -k 1.5`

$GSCOMMAND $FILES

这假设文件名为“file.pdf”。另见alberge的帖子。

对于名称中带有空格的文件,它会做一些奇怪的事情,因此如果您需要能够处理带空格的名称,则需要添加转义。

我真的很好奇其他人会想出什么,因为在我看来这是一个非常快速和肮脏的解决方案,但是由于其他人的答案而变得更好:)

修改

按照alberge的建议使用FILES的数字排序命令。