在Linux中使用脚本合并多个PDF文件?

5
我想从X网站保存/下载pdf文件,然后将所有这些pdf文件合并成一个,这样我就可以一次看到它们所有的内容。
我的做法是:
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
我的问题/难题是,我想将整个过程自动化为一个脚本,这样我就不必每天都这么做了。在X中每天都会添加新的pdf文件。
那么,如何在步骤2中完成上述操作,而不需要提供所有pdf文件的完整列表?我尝试在步骤2中使用file*.pdf,但它以随机顺序合并了所有pdf文件。
下一个问题是,每天的file*.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个回答

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

2

我之前曾使用过pdftk进行PDF文件的合并,因为它在Debian/Ubuntu系统中很容易获取。


我想按顺序合并PDF文件;使用*.pdf会以随机顺序合并...我想按照这个顺序合并:file1.pdf...file9.pdf file10.pdf file11.pdf等等... - seg.server.fault

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使用数值排序命令。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接