1

ファイル名に基づいてマージする必要がある数千の PDF があります。

次のような名前:

Lastname, Firstname_12345.pdf

上書きまたは追加する代わりに、次のような追加のページがある場合、当社のソフトウェアは数値/日時を PDF に追加します。

Lastname, Firstname_12345_201305160953344627.pdf

2 番目 (または 3 番目) の 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 つのファイルの後で停止します。誰かが私を正しい方向に向けることができますか?

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 に答える