Mac访达右键菜单深度定制:借助Shell脚本与右键助手集成Bandizip核心功能

张开发
2026/4/11 10:02:35 15 分钟阅读

分享文章

Mac访达右键菜单深度定制:借助Shell脚本与右键助手集成Bandizip核心功能
1. 为什么Mac用户需要定制右键菜单作为一个用了十年Mac的老用户我深知访达右键菜单的痛点。默认情况下压缩解压功能要么藏在二级菜单里要么需要先打开软件再操作。特别是用Bandizip这种第三方工具时官方根本不提供一级菜单支持每次解压文件都要多花两三秒点开二级菜单——你可能觉得这点时间不算什么但像我这种每天要处理几十个压缩包的设计师累积起来简直能让人抓狂。更糟的是Mac系统对未签名应用的限制越来越严格。很多用户发现即使安装了Bandizip右键菜单里也找不到解压选项。我当初为了解决这个问题试过至少五种方案从Automator工作流到各种付费插件最后发现Shell脚本右键助手的组合才是最稳定、最灵活的解决方案。这个方案有个额外好处——你完全可以根据自己需求定制菜单行为比如我就给常用压缩格式设置了不同的默认参数。2. 准备工作搭建定制环境2.1 必备软件安装首先确保你的Mac上有这两个关键软件Bandizip建议从Mac App Store安装正版搜索Bandizip就能找到学习版可能会遇到签名验证问题右键助手这个国产神器在GitHub上就能下载到最新版已经支持macOS Ventura安装后记得给这两个软件完整的磁盘访问权限。我遇到过好几次脚本执行失败的情况最后发现都是因为没在「系统设置-隐私与安全性-完全磁盘访问」里勾选这两个应用。特别提醒如果你用的Bandizip是非商店版本可能还需要在终端执行xattr -dr com.apple.quarantine /Applications/Bandizip.app来解除隔离属性。2.2 开发环境配置虽然我们只是写简单脚本但有个趁手的文本编辑器很重要。推荐VS Code或者BBEdit它们对Shell脚本的语法高亮和自动补全做得很好。打开终端运行chmod x filename.sh给脚本执行权限这个基本操作我就不赘述了但有个小技巧用which Bandizip命令确认下你的Bandizip安装路径有时候非默认路径会导致脚本报错。3. 打造智能解压功能3.1 解压脚本核心逻辑先来看我最常用的智能解压脚本这个版本比网上常见的更健壮#!/bin/bash # 获取右键助手的路径参数 target_dirrfpos source_filerfpath # 自动创建解压目录避免覆盖已有文件 base_name$(basename $source_file | cut -d. -f1) mkdir -p $target_dir/$base_name # 调用Bandizip解压支持中文路径 /Applications/Bandizip.app/Contents/MacOS/Bandizip x -o:$target_dir/$base_name $source_file -target:auto -charset:utf8这个脚本有三个改进点自动以压缩文件名创建子目录避免文件散落一地处理了中文文件名乱码问题用-target:auto让Bandizip自动识别压缩格式在右键助手里创建脚本时记得在「指定格式」里填上zip,rar,7z,tar,gz,bz2等常见格式这样只有选中这些文件时菜单才会出现。3.2 异常处理增强版实际使用中我发现有些特殊情况需要处理#!/bin/bash # 带错误检测的版本 source_filerfpath if [ ! -f $source_file ]; then osascript -e display notification 文件不存在或已被移动 with title 解压失败 exit 1 fi # 剩余逻辑同上...这个版本会在文件不存在时显示Mac原生通知而不是默默失败。你还可以用diskutil info检查目标磁盘剩余空间避免解压中途报错。4. 实现高级压缩功能4.1 基础压缩脚本压缩脚本比解压复杂些因为要处理多种参数。这是我的基础模板#!/bin/bash # 获取右键助手参数 target_pathrfpos selected_items($) # 生成压缩包名称当前日期时间 zip_name$(date %Y%m%d_%H%M%S).zip # 调用Bandizip压缩递归处理子目录 /Applications/Bandizip.app/Contents/MacOS/Bandizip c $target_path/$zip_name ${selected_items[]} -fmt:zip -r在右键助手里创建时不要勾选「指定格式」因为我们希望这个菜单始终可见。-r参数让Bandizip自动包含子目录内容这对程序员特别有用。4.2 多格式压缩方案我办公室经常需要给Windows同事发文件所以准备了三个版本的压缩脚本# 极速版快速压缩不加密 /Applications/Bandizip.app/Contents/MacOS/Bandizip c $target_path/$zip_name ${selected_items[]} -fmt:zip -level:1 # 安全版AES256加密 /Applications/Bandizip.app/Contents/MacOS/Bandizip c $target_path/$zip_name ${selected_items[]} -fmt:zip -password:123456 -encrypt:aes256 # 分卷压缩每卷500MB /Applications/Bandizip.app/Contents/MacOS/Bandizip c $target_path/$zip_name ${selected_items[]} -fmt:zip -volume:500m把这些脚本分别命名为「快速压缩」、「加密压缩」和「分卷压缩」右键菜单就能变成专业级压缩工具。5. 美化与效率提升技巧5.1 自定义菜单图标从Bandizip应用包里提取图标cp /Applications/Bandizip.app/Contents/Resources/AppIcon.icns ~/Desktop/然后在右键助手的脚本设置里上传这个icns文件。我建议用GraphicConverter把图标缩放到32x32像素这样在Retina屏幕上显示最清晰。5.2 快捷键绑定右键助手支持为菜单项绑定快捷键。我习惯设置解压CmdOptionE压缩CmdOptionC加密压缩CmdOptionShiftC注意避开系统默认快捷键可以在「系统设置-键盘-键盘快捷键」里检查冲突。5.3 脚本自动更新方案把脚本文件放在iCloud Drive里然后用launchd设置定时任务每周自动从GitHub拉取最新版本?xml version1.0 encodingUTF-8? !DOCTYPE plist PUBLIC -//Apple//DTD PLIST 1.0//EN http://www.apple.com/DTDs/PropertyList-1.0.dtd plist version1.0 dict keyLabel/key stringcom.update.scripts/string keyProgramArguments/key array string/bin/bash/string string-c/string stringcd ~/Library/Mobile\ Documents/com~apple~CloudDocs/Scripts git pull/string /array keyStartCalendarInterval/key dict keyWeekday/key integer0/integer keyHour/key integer10/integer keyMinute/key integer0/integer /dict /dict /plist把这个plist文件放到~/Library/LaunchAgents/目录下执行launchctl load ~/Library/LaunchAgents/com.update.scripts.plist激活任务。

更多文章