https://github.com/wzh4869/AppPorts 外置硬盘拯救世界!/ External drives save the world!
一款专为 macOS 设计的应用程序迁移与链接工具。
轻松将庞大的应用程序迁移至外部存储,同时保持系统无感运行。
Mac 的内置存储空间寸土寸金。AppPorts 允许您一键将 /Applications 目录下的应用程序迁移到外部移动硬盘、SD 卡或 NAS ,并在原位置保留应用入口,让系统误以为应用仍在本地。
对 macOS 系统而言,应用依然“存在”于本地,您可以像往常一样启动它们,但实际占用的却是廉价的外部存储空间。
.app 文件夹结构,仅将内部的 Contents 数据目录链接至外部存储。相较于市面上其他方案,AppPorts 采用了独特的 Contents 链接 技术,兼顾了美观、兼容性与系统整洁度。
| 方案 | AppPorts | 传统软链 |
|---|---|---|
| Finder 图标 | ✅ 原生 (无箭头) | ❌ 有箭头 (快捷方式) |
| Launchpad | ✅ 完美索引 | ⚠️ 经常失效 |
| App 菜单 (macOS 26) | ✅ 完美支持 | ❌ 不支持 |
| 文件系统整洁度 | ✅ 极佳 (仅 1 个链接) | ✅ 极佳 (仅 1 个链接) |
| 维护与还原 | ✅ 毫秒级 | ✅ 毫秒级 |
| 欢迎页 | 主界面 |
|---|---|
![]() |
![]() |
| 深色模式 | 语言切换 |
|---|---|
![]() |
![]() |
请前往 Releases 页面下载最新版本的 AppPorts.dmg。
如果打开应用时遇到此提示(且系统建议移到废纸篓),这是因为应用没有进行开发者签名,被 macOS 的 Gatekeeper 机制拦截。 (注意:以下命令假设您已将 AppPorts 拖入 应用程序 文件夹) 您需要在终端运行以下命令来移除隔离属性,即可正常打开:
xattr -rd com.apple.quarantine /Applications/AppPorts.app
首次运行时,AppPorts 需要 “完全磁盘访问权限” 才能读写 /Applications 目录。
+ 号,添加 AppPorts 并开启开关。 1
byby 2 天前
既然这么好,为啥才 9 个 star
|
2
wangheng486 OP @byby 我也不知道哈哈哈,可能是之前没在别的地方发,我觉得还挺好用的
|
3
BernieDu 2 天前
是在 application 创建一个空的 app 文件夹,文件夹内的内容是软连接到移动硬盘的 app 吧。这样的话拔掉移动硬盘会留下一堆无效内容,还不如直接在移动硬盘的 application 文件夹直接打开 app 啊
|
4
xy19009188 1 天前
可以提个建议吗,app 除了按照首字母,还可以按照 app 大小进行排序
|
5
tamarix666 1 天前
正好有这个需求,多谢 OP 。有个小问题:如果移动硬盘意外掉线,有没有修复机制呢?
|
6
wangheng486 OP @BernieDu 软件内可以直接删除“空的 app 文件夹”,这个软件起初就是为了“软连接”管理麻烦的问题,时间长了忘记哪个软件是在外置存储,做空的文件夹目的是为了 mac26 之前版本启动台软连接会出现不好看的快捷方式角标问题。
|
7
wangheng486 OP @xy19009188 感谢,我这边后期会试着加这个功能
|
8
wangheng486 OP @tamarix666 没有,这样比较复杂,暂时没有考虑这个问题。这个可以简单理解为一个“软连接”管理应用,只不过软连接实现比较像“软件真的就在内置存储一样”
|
9
iamzuoxinyu 1 天前
支持 Playcover 的 ios 应用/游戏么,貌似有的游戏类的应用会检测 container 里的软链接。
|
10
wangheng486 OP @iamzuoxinyu 还真没试过 Playcover ...
|
12
wangheng486 OP @xy19009188 已添加该功能
|
13
wangheng486 OP @unneeded 其实映射 contents 也会这样,软件目的就是不让旧版本的 macos 启动台出现软连接角标
|
14
unneeded 1 天前
@wangheng486 #13
那我感觉可以优化一下,把目标文件夹中的".app"去掉,这样搜索框就不会搜到两个应用了 |
17
wangheng486 OP @unneeded 感谢,我想想怎么弄🙏
|
18
xy19009188 1 天前
@wangheng486 老哥是真速度,这下我的小 256 有救了
|
19
xy19009188 1 天前
发现没有 adobe 家的应用
|
20
runking 1 天前
我之前让 AI 写的这个
#!/bin/bash # ============================================================================= # 一键恢复脚本 - SSD 数据软链接设置 # One-Click Restore Script for SSD Data Symlinks # ============================================================================= # 使用方法 / Usage: # chmod +x /Volumes/SSD/AppData/restore_symlinks.sh # /Volumes/SSD/AppData/restore_symlinks.sh # ============================================================================= set -e RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' SSD_PATH="/Volumes/SSD/AppData" echo -e "${BLUE}========================================${NC}" echo -e "${BLUE} SSD 数据软链接恢复脚本${NC}" echo -e "${BLUE} 版本: 1.0 | 日期: 2026-01-05${NC}" echo -e "${BLUE}========================================${NC}" echo "" if [ ! -d "$SSD_PATH" ]; then echo -e "${RED}错误: SSD 未挂载: $SSD_PATH${NC}" exit 1 fi echo -e "${GREEN}✓ SSD 已检测到${NC}" echo "" create_symlink() { local source="$1" local target="$2" local name="$3" if [ ! -e "$source" ]; then echo -e "${YELLOW}⚠ 跳过 $name: 数据不存在${NC}" return fi if [ -e "$target" ] && [ ! -L "$target" ]; then echo -e "${YELLOW}⚠ $name: 目标已存在,跳过${NC}" return fi [ -L "$target" ] && rm "$target" mkdir -p "$(dirname "$target")" ln -s "$source" "$target" echo -e "${GREEN}✓ $name${NC}" } echo -e "${BLUE}[1/6] Gemini${NC}" create_symlink "$SSD_PATH/Gemini/antigravity" "$HOME/.gemini/antigravity" "Gemini Playground" create_symlink "$SSD_PATH/Gemini/antigravity-browser-profile" "$HOME/.gemini/antigravity-browser-profile" "Browser Profile" echo -e "${BLUE}[2/6] Microsoft Edge${NC}" create_symlink "$SSD_PATH/MicrosoftEdge/Microsoft Edge" "$HOME/Library/Caches/Microsoft Edge" "Edge Cache" echo -e "${BLUE}[3/6] Xcode${NC}" mkdir -p "$HOME/Library/Developer/Xcode" create_symlink "$SSD_PATH/Xcode/DerivedData" "$HOME/Library/Developer/Xcode/DerivedData" "DerivedData" echo -e "${BLUE}[4/6] Quark${NC}" create_symlink "$SSD_PATH/Quark/Data" "$HOME/Library/Application Support/Quark" "Quark" echo -e "${BLUE}[5/6] PixPin${NC}" create_symlink "$SSD_PATH/PixPin/Data" "$HOME/Library/Application Support/PixPin" "PixPin" # New additions based on the provided instruction echo -e "${BLUE}[6/6] Google${NC}" create_symlink "$SSD_PATH/Google/Data" "$HOME/Library/Application Support/Google" "Google Data" echo -e "${BLUE}[7/6] Microsoft Edge App Support${NC}" create_symlink "$SSD_PATH/MicrosoftEdge/AppSupport/Data" "$HOME/Library/Application Support/Microsoft Edge" "Edge App Support Data" echo -e "${BLUE}[8/6] Apple Wallpaper${NC}" create_symlink "$SSD_PATH/AppleWallpaper/Data" "$HOME/Library/Application Support/com.apple.wallpaper" "Apple Wallpaper Data" echo -e "${BLUE}[9/6] UE DDC 环境变量${NC}" ZSHRC="$HOME/.zshrc" if grep -q "UE_LocalDataCachePath" "$ZSHRC" 2>/dev/null; then echo -e "${GREEN}✓ 环境变量已存在${NC}" else echo "" >> "$ZSHRC" echo "# Unreal Engine DDC" >> "$ZSHRC" echo "export UE_LocalDataCachePath=\"$SSD_PATH/UnrealEngine/DDC\"" >> "$ZSHRC" echo "export UE_SharedDataCachePath=\"$SSD_PATH/UnrealEngine/DDC\"" >> "$ZSHRC" echo -e "${GREEN}✓ 环境变量已添加${NC}" fi echo "" echo -e "${GREEN}✅ 恢复完成! 请运行: source ~/.zshrc${NC}" |
21
wangheng486 OP 这种也不错很清爽
|
22
wangheng486 OP @xy19009188 adobe 比较特殊,我是先把/Applications 里的 adobe 文件夹拖到外部存储,然后把外部存储位置修改成 adobe 的文件夹内,这样移动
|
23
GodIsJasonBourne 14 小时 16 分钟前
楼主可以!也帮了我 256 的大忙!夸一句,楼主人才!
|
24
wangheng486 OP @GodIsJasonBourne 感谢感谢😄
|