【问题标题】:Bash script pdftk merge PDFsBash 脚本 pdftk 合并 PDF
【发布时间】:2013-05-15 04:30:50
【问题描述】:

我有几千个 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

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

【问题讨论】:

  • 能否提供样品名称列表?

标签: bash pdftk


【解决方案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

【讨论】:

  • 完美运行。非常感谢!
猜你喜欢
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-13
  • 2013-09-16
相关资源
最近更新 更多