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