使用 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
我正在尝试让自动程序合并来自两个名称相似的文件的 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