Automator 生成文件名字冲突的问题

103 阅读2分钟

背景介绍

前面文章提到使用一个 workflow 脚本把 pdf 文件按照 booklet 格式重新排列。最后把重排后的页面合并后生成新的文件,这个文件保存在桌面 Desktop 上,默认的命名是 booklet.pdf。遇到的一个问题是,如果我们对多个文件进行转换的话,那么文件命名显然会冲突,Automator 提供的机制是一旦遇到重名文件已经存在,就会对把新文件使用随机名字。

更具体一点来说就是: Automator 提供的 "Copy Finder Items" 有自带的处理名字冲突的机制,那就是遇到文件已存在就对新文件使用随机名字;我们没法改变它的行为,也就是没办法强制它覆盖。

那怎么办? 我们有以下几种方案:

方案一

如果 Desktop 已经存在  booklet.pdf,删除掉它;这样可以保证 "Copy Finder Items" 不会触发文件名冲突导致使用随机名字的问题。

我们在 "Combine PDF Pages" 和 "Copy Finder Items" 之间插入一个 bash 脚本,目的就是删除 Desktop 中的 booklet.pdf 文件(如果有的话)

image.png

注意:

所有的 Actions 都是链式传递。上一个 Action 的 Output 传给下一个 Action 作为 Input。

这里插入脚本后,这个传递就断了,虽然脚本并不对上一个 Action 的 output 做任何的处理,但是它需要负责把上一个 Action 的 output 顺递给下一个 Action。否则 "Copy Finder Items" 的 Input 就是空了,后续就要报错了。这里的 echo "$@" 的作用就是帮助传递。

方案二:使用时间戳命名

这种方案不错,时间戳还可以提示文件的生成顺序。

我们在 "Combine PDF Pages" 之后添加一个重命名脚本即可:

image.png

方案三:与源文件同名

由于我们把最终生成的文件放在 Desktop 中(或者某个 tmp 目录),假如我们的源文件并不在这个目录中,那我们使用与源文件相同名字并没有问题。

这种方案简单,我们只需要删掉(或禁用)"Rename Finder Items "就可以了。测试证明不行,还是会生成随机名字。

原因在于 "Combine PDF Files" 这个步骤已经丢失了原文件名,只会使用一个随机名。

总结

方案一和方案二都是可以的,两者都能达到目的。具体采用哪种看个人需求。方案三由于不好取得原文件名,所以暂时搁置这个方案,就不细究了。

全文完!

如果你喜欢我的文章,欢迎关注我的微信公众号 deliverit。