使用 Mac 自动程序按文件名合并 pdf

Merge pdf by file name using Mac automator

我正在尝试让自动程序合并来自两个名称相似的文件的 PDF 页面。

现在我已经在 automator 中有一个服务工作流程,它能够合并两个 selected 文件:

虽然这个工作流程确实有用,但我仍然必须手动 select 将要合并的文件一个一个地合并。此外,生成的文件名正在重命名,并在设置的单词后使用明显随机的字母字符串。

我将主要使用此脚本来获取编号文件(例如:10989.pdf)与包含这些编号的文件合并,名称如“lst009010989.pdf” .这些文件都在一个文件夹中,其中包含名称遵循同一系统的各种其他文件,所以我需要的是工作流获取编号文件并将它们加入各自的 lst 文件,将其复制到另一个文件夹,同时维护编号文件名称(在本例中为 10989),然后对文件夹中的其他文件执行相同的操作。

我怎样才能做到这一点?

附加信息: 合并文件的第一页应该始终是编号文件中的一页(示例中为 10989)。第二个应该是 LST 文件之一。生成的文件应命名为 NF_LST xxxxx.pdf(xxxx 是编号文件的名称,在本例中为 10989)。

lst 文件名始终以 lst 开头,有 14 个字符,最后一个字符始终与带编号的文件名相同。带编号的文件名从 3 个字符更改为 6 个字符。

下图显示了典型文件夹包含的内容:

以下已在 macOS Catalina 10.15.4 和 10.15.5 下进行测试,在 10.15.5 下它对我不起作用 Quick Action 运行 Shell Script action 中似乎有一个 bug当使用 find command 时。它还可以在 macOS High Sierra 下工作,并且在三个测试环境中也可以作为 shell 脚本 工作。这进一步支持了 10.15.5.bug 假设。

这需要使用来自third-party的cpdf,免费,Coherent PDF Command Line Tools Community Release -- Direct download link: Download pre-built cpdf tool

示例 bash 脚本 代码:

for i in "$@"; do
    [[ ${i} =~ .*/[0-9]{3,6}.*\.[pP][dD][fF] ]] || continue
    j="$(find "${i%/*}" -type f -iname "lst*${i##*/}")"
    [[ ${j} =~ .*/lst.*[0-9]{3,6}\.[pP][dD][fF] ]] || continue
    l=${j##*/}
    [[ ${#l} -eq 18  ]] || continue
    /usr/local/bin/cpdf -merge "${i}" "${j}" -o "${i%/*}/FN_LST ${i##*/}"
done

按照编码,它执行以下操作:

  • 检查传递的 files 是一个名为 PDF file 的 3 到 6 位数字。
  • 在同一个文件夹中找到对应的PDF文件,以lst 并以名为 PDF file.
  • 的相同 3 到 6 位数字结尾
  • 如果没有找到相应的 PDF 文件,它将移动到下一个 文件
  • 验证找到的相应 PDF 文件 的长度为 18 个字符,包括扩展名。
  • 将匹配集与名为 PDF file 的 3 到 6 位数字组合在新的组合 文件中.
  • 创建组合的文件,例如FN_LST [0-9]{3,6}.pdf, (FN_LST 10989.pdf), 在同一个文件夹,可更改。
  • 不覆盖现有的文件

更改新组合 文件 的创建位置,例如/usr/local/bin/cpdf ... 行,将 ${i%/*} 更改为:

-o "${i%/*}/FN_LST ${i##*/}"

收件人:

-o "/path/to/FN_LST ${i##*/}"

其中 /path/to 完全限定的目录路径名 ,例如:

-o "$HOME/Documents/Combined PDF Files/FN_LST ${i##*/}"

注意:/path/to目录必须已经存在,因为没有错误处理 ,尽管也可以添加,例如:

d="HOME/Documents/Combined PDF Files"
[[ -d ${d} ]] || mkdir -p "${d}"

for i in "$@"; do
    [[ ${i} =~ .*/[0-9]{3,6}.*\.[pP][dD][fF] ]] || continue
    j="$(find "${i%/*}" -type f -iname "lst*${i##*/}")"
    [[ ${j} =~ .*/lst.*[0-9]{3,6}\.[pP][dD][fF] ]] || continue
    l=${j##*/}
    [[ ${#l} -eq 18  ]] || continue
    /usr/local/bin/cpdf -merge "${i}" "${j}" -o "${d}/FN_LST ${i##*/}"
done