Bash脚本pdftk合并PDF

时间:2013-05-20 15:07:23

标签: bash pdftk

我有几千个PDF需要根据文件名合并。

命名如下:

Lastname, Firstname_12345.pdf

如果有其他页面,我们的软件会在pdf中附加一个数字/日期时间,而不是覆盖或附加:

Lastname, Firstname_12345_201305160953344627.pdf

对于所有没有第二(或第三)pdf的脚本,脚本不需要触摸。但是,对于所有具有倍数的那些,它们需要合并到一个新文件*_merged.pdf中?原件已删除。

我尽了最大的努力,这就是我到目前为止所做的。

#! /bin/bash

# list all pdfs to show shortest name first
LIST=$(ls -r *.pdf)
for x in "$LIST"

# Remove .pdf extension. merge pdfs. delete originals.
do
    y=${x%%.*}
    pdftk "$y"*.pdf cat output "$y"_merged.pdf
    find "$y"*.pdf -type f ! -iname "*_merged.pdf" -delete
done

此脚本在某种程度上有效。它将合并和删除原件,但它没有任何内容可以跳过不需要任何附加内容的内容,当我在一个包含多个测试文件的文件夹中运行它时,它会在一个文件后停止。有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:0)

由于您的文件名包含空格,因此for循环不会按原样运行。

获得文件名列表后,测试匹配y*.pdf的文件数,以确定是否需要合并pdfs。

    #!/bin/bash

    LIST=( * )

    # Remove .pdf extension. merge pdfs. delete originals.
    for x in "${LIST[@]}" ; do
        y=${x%%.pdf}
        if [ $(ls "$y"*.pdf 2>/dev/null | wc -l ) -gt 1 ]; then
            pdftk "$y"*.pdf cat output "$y"_merged.pdf
            find "$y"*.pdf -type f ! -iname "*_merged.pdf" -delete
        fi
    done