在日常使用电脑的过程中,总有一些关于文件 /文件夹的操作是有规律、有重复性的,比如:
- 对调两个文件的文件名
- 把指定文件备份到指定文件夹,并自动改名
- 把指定文件移动到指定文件夹,并自动删除超过 n 天的旧文件
- 复制文件并且在复制结束后校验文件完整性
- 按你喜欢的方式单向 /双向同步两个文件夹(具体就看扩展代码怎样写了)
- ……等等
一般可能会用 shell 、Python, 或者用专门的 GUI 程序来处理这些问题。但 GUI 程序的可定制性通常不高,每次使用都需要多次点击,或者每个 GUI 程序都有局限性,不如脚本一个命令解决问题那么清爽、那么灵活。而 shell 、Python 又有要么每次重新写,要么需要管理一堆散乱的脚本文件、要对每个命令起名等一些繁琐的地方。
并且脚本代码如果越写越长的时候,可维护性就会显著变差,因此,我做了一个用 Go 语言来写 extension 进行自由定制的文件 /文件夹处理器: gof
gof 本身的功能
gof 本身并不包含任何解决实际问题的代码,比如对文件进行改名、复制、移动等操作都不包含,这些都由插件 /扩展(在 gof 里称为 recipe )来实现,需要什么功能,就自己写一个 recipe 。
gof 本身的作用是:
- 对插件 /扩展( recipe )进行统一管理。 比如 recipe 文件都集中在一个文件夹,拥有统一的 CLI 格式,显得井井有条。
- 利用 YAML 来写任务计划。 因此作为开发者写插件的时候不需要处理 GUI 问题,作为使用者可非常直观地编辑 YAML 文件。
- 一个 YAML 文件里可包含多个任务。 每个任务可以采用不同的 recipe, 不同的参数、处理相同或不同的文件, gof 会按顺序依次执行。插件编写者只需要专心写一个插件即可,不需要操心任务是如何组合排列的。
- 提供了
-dump功能。 用来预览即将执行的任务计划,而不实际执行,特别是刚开始对命令不太熟悉的时候,该功能非常实用,可以通过预览任务计划提早发现问题,确认没问题后再去掉-dump实际执行。
其中 CLI 与 YAML 的配合效果很不错,YAML 很直观,容易编辑,比纯 CLI 更直观,又比 GUI 更容易开发。
当然,如果你不喜欢或不熟悉 Go 语言,完全可以用其他语言来重写一个类似的程序,因为 gof 本身的功能不多,代码量很少,我全新写的用了两天(有效时间大概 8 个小时),在有参考的情况下用另一种语言改写,半天绝对足够了。
源码仓库
https://github.com/ahui2016/gof
(国内镜像 https://gitee.com/ipelago/gof )