1

我有几千个需要根据文件名合并的 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

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

4

1 回答 1

1

由于您的文件名包含空格,因此 for 循环将无法按原样工作。

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

    #!/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
于 2013-06-12T23:10:57.797 回答