最近工作中经常要手动创建一些虚拟的 k8s 集群,然后把 kubeconfig 发给测试,每次在 iTerm 终端上 vim 编辑完,都要用 open ./ 打开 Finder 然后复制粘贴发给测试,所以就想有没有命令直接能把文件复制到剪切板,不是像 pbcopy 那样把文件内容拷贝到剪切板。
然后注意到 V2 上有个帖子在讨论怎么实现: https://www.v2ex.com/t/700647?p=1#reply27 。
看了看上面帖子里的讨论,功能实现大概分为两个阶段:1. 获取当前文件的绝对路径 2. 调用 apple script 复制文件到剪切板。
于是我复制粘贴了一个脚本去调用,发现获取文件绝对路径有使用 realpath 或者 readlink 的,但是速度都很慢,我工作中使用 Golang ,而且 Golang 打成二进制也比较容易,所以就用想着用 Golang 实现这俩步骤。
首先使用 Golang 的 filepath.Abs 来获取绝对路径,这比调用 realpath 要快多了。
其次就是如果直接使用 set the clipboard to POSIX file
命令,虽然可以复制到剪切板,但是在微信、企业微信、QQ 发送不出去... 加上 tell app "Finder"
后就能正常发送,好像是因为权限问题?
但是添加了 tell app "Finder"
后速度就很慢,所以打算用 Object-C 来写复制的逻辑,然后用 Golang 调用,这样不管是获取文件的绝对路径还是复制文件到剪切板速度都有提升。
这样用 Golang 实现一遍,首先速度有明显提升,其次只需要一个二进制就能运行,不用额外安装其他依赖了。
https://github.com/mayooot/ClipChirp
在 Release 里下载二进制文件,然后 mv 到 /usr/local/bin
就可以了。
一个简单的使用示例:
$ clipchirp bird.png
🦤 Successfully copied /Users/ming/ClipChirp/bird.png to clipboard
如果对你有帮助,请给我一个 ⭐️ 吧~