应用场景:

由于工作原因,每天需要收集几张截图(jpg),最后打包发邮件。虽然量不是太多,但是对于重复的操作,写个自动脚本岂不是很高大上,自动打包过程中可以对图片批量压缩一下,减少邮件大小。


准备工作:

基本都是在 automator 里面操作,需要补充的是 7z 这个命令。

在mac下对比了一下几种压缩格式:

**zip**直接右键就可以生成,但是zip发给win用户会出现乱码;

**rar**装过,可选;

**7z**压缩效果比较好,到win下面也不会有编码问题,所以一直在用这个格式(tar.bz2对比了一下压缩率没有7z高,另外这样的格式发给win用户会觉得不习惯)


系统默认不带7z这个命令,需要安装p7zip,可以官网下原码自己编译,也可以用比较简单的办法brew(家酿,http://brew.sh),

#brew install p7zip

基本无痛安装好,在终端输入7z,有输出就说明安装好了,类似rar命令。

我在安装的时候出现点小故障,装好了之后7z命令无效,但brew提示安装成功的,能找到目录 /usr/local/Cellar/p7zip/9.20.1/bin ,并且有7z,7za,7zr这三个可执行(只用到7z),修复方法是 ln 快捷方式

#sudo ln -s /usr/local/Cellar/p7zip/9.20.1/bin/7z /usr/bin
#sudo ln -s /usr/local/Cellar/p7zip/9.20.1/bin/7za /usr/bin
#sudo ln -s /usr/local/Cellar/p7zip/9.20.1/bin/7zr /usr/bin


制作app

i. 打开 Automator,新建一个 Application


ii. 流程的第一步,选择左侧 Files & Folders 组,找到 Ask for Finder Items 拖放到右侧,Start at 这个可以选择需要打包文件的主目录,例如 /Users/user/Desktop/screenshot ,Type 选择 Folders


iii. 流程的第二步,从左侧找到Duplicate Finder Items,拖放到右侧(复制一份的操作比较安全),这一步操作会在相同文件夹下创建一个部分,例如 “20140715” 这个文件夹将生成一个命名为 “20140715 copy”的副本


iv. 流程的第三步,从左侧找到 Get Folder Contents,拖放到右侧,这一步将作为下一步的输入


v. 流程的第四步,左侧切换到 Photos 组,找到 Scale Images ,拖放到右侧,这一步将批量压缩选定文件夹里面的图片文件,下拉列表选择 To Size (pixels) 既按像素来压缩图片,右侧填入 1024(如果照片的像素为a * b, a 大于1024,那么 a 将被减小到1024,b会按比例减小到相应的值),这个尺寸能在保持图片内容清晰可见(没有太小的字体)的情况下,尽量减小图片大小。


vi. 流程最后一步,左侧切换到 Utilities 组,找到 Run Shell Script,拖放到右侧,靠右的参数 Pass input 选择 as arguments ,然后在白色区块内填入 shell 脚本。

#picPath=`dirname "$1"`
#spath=$picPath/*.jpg
#tpath=${picPath:0:39}.7z
#echo $spath
#echo $path
#7z a -t7z -mx7 "$tpath" "$spath"

解释如下:

我们需要打包的是工作目录下得 20140715 这个文件夹里面的所有jpg图片,如shell第一行,$1 实际上携带了第一个参数(当前操作的是复制过的文件夹) "/Users/user/Desktop/screenshot/20140715 copy/pic1.jpg”,dirname 的作用是取到当前目录,所以picPath的值为 "/Users/user/Desktop/screenshot/20140715 copy”;

先看最后一行shell,7z 命令,a命令就是增加压缩包,-t7z 开关说明文件类型type 为7z, -mx7 开关将压缩率提高到7,后面 tpath 为目标地址,spath 是源文件地址,加双引号是避免路径出现空格导致执行失败;

确定源地址,见shell第二行,$picPath/*.jpg,那么这里就是"/Users/user/Desktop/screenshot/20140715 copy/*.jpg”,即目录下的所有jpg文件;

确定目标地址,${picPath:0:39}.7z,从第0个字符开始,到后面的第39个字符,这里就是”/Users/user/Desktop/screenshot/20140715.7z”;

现在就很清楚了,echo主要为了 debug 用的。



最后存储为app就可以了。存储好的 app 可以直接双击运行,还可以自定义图标,看起来更像app。

修改图标的方法:在生成的 .app 文件上按 Command+i, 打开 信息面板,左上角的图标那里是可以点的,如果是png文件的话,直接拖上去效果一般出不来,最好就是先在预览里面打开png,然后command+a 全部选中以后,command+c 粘贴,回到信息面板,选中左上角图标,command+c 就切换好了。 

用 Automator 做一个自动打包的 app_ 7z》》》》》用 Automator 做一个自动打包的 app_automator_02



后记,

电源放在外包一直是个隐患啊,今天差点杯具。上班刚好赶上大雨,雨伞不够大,能湿的基本都湿了,对,包括充电器(电脑完好,哈哈),只有10%的电量,完了电脑就没电了,充电器充不了,碰运气把它放空调下面吹了n个小时,结果就复活了,电脑打开后第一件事就是写这个博客,呵呵呵。