木匣子

Web/Game/Programming/Life etc.

在 OSX 中粘帖并替换文件

在现阶段游戏开发中有一个简单但烦琐的问题:每当美术资源需要替换时,需要一序列的搬运工作:

  1. 从版本控制工具更新美术资源(文件名[0.jpg, 1.jpg, 2.jpg…],美术组自已的命名方案)
  2. 在 working space 中找到相应的资源(文件名[a.jpg, b.jpg, c.jpg…],程序组的命名方案)
  3. 逐个替换:复制美术组的文件到 working space(command+c/command+v),复制程序组文件名(enter, command+c),删除程序组文件(command+backspace),修改新的资源文件为原有文件名(enter, command+v)…

如果数量不多的话,这样简单的操作还是可以容忍的。但是有时候懒惰的天性就会让大多数程序员对这种烦琐的操作忍无可忍。当然,解决方案也有很多:

  1. 提出一个合理的方案,使得美术组与程序组使用相同的命名规则。
  2. 使用更佳完善的商业游戏引擎提供的资源管理解决方案。
  3. 找一个方便替换文件的工具。

对于第一种方案,对开发组的阻碍是,美术组对英文命名不敏感;此外程序组并不知道美术组如何分割资源,随时会增删改资源,会增加沟通成本;

对于第二种方案,对于使用开源游戏引擎的小组,一时半会是没办法做出这样的改动的。

所以如果能使用第三种方案,那也是一个不错的 fallback 。

我试想有没有这样的工具:

有两个文件列表,用户从一个文件列表中拖动 1.jpg 到另一个文件列表的 a.jpg 上,于是 a.jpg 的内容便被 1.jpg 替换,而文件名不发生改变。

Mac OSX 的 finder 没有这样的功能。经过一段时间的搜索,也没有找到符合这个需求的工具(如果有请告诉我)。由于没有 OSX 的开发经验,所以我也不确定 OSX 提不提供这样的 API,如果有的话,或许可以开发一个这样的工具。

经过一个简单的讨论,有人提到 OSX 的 Automator 引起了我的注意。

Automator 是一个 OSX 下的自动化工具,可以从系统中获得各种事件/文件/快捷键作为输入,然后执行预置好的脚本。于是我的思路变成了这样:

用户在 Finder 中选择一个文件 1.jpg ,按下快捷键 ctrl+command+c 将该文件的路径复制到 clipboard ; 用户在 Finder 中选择要替换的文件 a.jpg 按下 ctrl+command+v ,完成替换。

这个简单的变化,使得最初的操作简化了许多:右手使用鼠标在 Finder 中选择文件,左手按快捷键完成替换。右手不再需要在鼠标和键盘中来回切换(按 enter 和 backspace),效率高了许多。

经过一番折腾,我顺利用 Automator 制作了这个工具。它由两个 workflow 组成:

  • copy path: 将当前选中的文件路径复制到剪切板
  • replace file with clipboard: 使用剪切板中指定的文件替换当前选中文件内容

有兴趣体验这个小工具的话,可以点这里下载,解压后双击运行两个 workflow ,并选择 Install 以安装到 Services 目录;

workflow 存放于 ~/Library/Services

然后在偏好设置中为两个 Services 设置快捷键:

QQ20140728-1.png

本工具在 Mac OSX 10.9 开发并测试

Update 2014-11-29:
解决了文件名中有空格导致的BUG,并将项目提交至 mutoo/finder-file-replacer