平时折腾天马整合包时很多朋友会发现自己新买的大容量硬盘很快就被动辄几百 GB 的“全家桶”塞满了。这些整合包数据量非常惊人真正会被反复游玩的可能只有其中一小部分但你又不想错过漂亮的封面墙、游戏简介和预览视频。于是一种新玩法出现了把 ROM 全部删掉只保留封面、简介和视频素材让天马变成一个 50G 级别的“怀旧游戏数字博物馆”只看不玩。这篇文章就围绕这个思路梳理一套完整的精简与配置方案包含目录结构拆解、批处理与 Python 脚本示例、常见问题排查以及工程实践上的注意事项。如果你手头正好有一个庞大的天马整合包又希望快速把它改造成适合浏览的媒体库这篇文章可以直接照做。需要提前说明的是天马模拟器本身是一个开源前端方案它不会自动包含任何游戏内容。ROM 文件的版权通常归属于原游戏公司或个人请确保你只是对自己拥有合法备份、或已经获得授权的文件做整理。本文只讨论前端资源整理和目录配置方法不提供任何 ROM 下载渠道。1. 为什么有人会把天马整合包改成“只看不玩”版本在开始动手之前先搞清楚这个需求背后的原因以及天马模拟器的基本工作原理后面配置起来会更顺手。1.1 天马模拟器前端到底是什么天马模拟器并不是一个具体的游戏机模拟器它本质上是一套基于 Pegasus Frontend 的整合方案。Pegasus 是一个跨平台的开源游戏前端支持 Windows、Android、Linux 等系统。它的作用很简单把游戏 ROM、模拟器核心、封面图片、标题截图、游戏简介、预览视频等信息集中展示在一个漂亮的图形界面里用户可以像逛数字商店一样浏览自己的游戏库。为了保证“开箱即用”社区作者会把 Pegasus 前端、RetroArch 多合一模拟器、各个平台的模拟器核心、BIOS 文件、中文游戏列表、封面图、简介和预览视频打包在一起做成一个庞大的“天马整合包”。这种整合包的优点是非常省心下载解压就能玩缺点是体积巨大常见版本动辄 400G、600G甚至超过 1T。很多人下载之后发现硬盘根本没有足够空间放下完整版或者自己只是喜欢浏览游戏封面和回忆片头动画并不想真正花时间通关每款游戏。1.2 “删 ROM、留媒体”的场景从哪里来“删掉 ROM只保留封面简介视频”这句话描述的场景很典型用户希望保留天马前端的浏览体验特别是封面墙、简介文字和视频预览但又不想被几百 GB 的 ROM 文件占满硬盘。我见过不少玩家会把天马整合包当成一本“游戏百科全书”来使用。下班之后打开前端听听熟悉的片头音乐看看当年的游戏封面回忆一下童年这种体验本身就有价值不一定非要打开 ROM 去玩。如果只是浏览内容ROM 文件其实是多余的因为它们占用了绝大部分体积。一个包含 PS2、Wii、NGC 等大容量平台的整合包ROM 可能是媒体素材体积的好几倍。删掉 ROM 之后整个资源库可能从四五百 GB 缩减到 50G 左右正好符合“只看不玩”的需求。从技术角度看这个操作完全可行。天马前端的浏览依赖的是 metadata.pegasus.txt 文件中描述的游戏条目以及封面、视频等媒体文件ROM 文件只负责“启动游戏”这一步。只要媒体资源完整前端依旧可以展示一个漂亮且信息丰富的游戏库只是点击“启动”时会提示找不到文件或无法运行。对“只看不玩”的用户来说这正是想要的效果。1.3 精简前后的体积对比与用户收益这里给出一个粗略的经验参考值。在天马整合包中ROM 文件通常占总体积的 80% 到 90% 以上媒体素材封面图、标题图、截图、预览视频相对小很多。例如一个 300G 的整合包ROM 可能占了 250G 左右媒体素材大约 40G 到 50G前端程序和模拟器核心约占几个 G。把这个整合包改造成“只看不玩”的精简版之后体积可以压到 50G 左右。对用户来说收益主要体现在三个方面第一普通硬盘也能轻松容纳不再需要为了一个资源库单独购买大容量机械硬盘第二启动前端的加载速度变快因为不需要再扫描大量 ROM 文件第三这个精简包可以随意复制、分享给同样“只想看不想玩”的朋友前提是你拥有对应的使用权限。接下来的章节会围绕这个目标一步步操作。2. 动手前先看懂天马整合包目录结构想安全地删 ROM、留媒体前提是准确理解天马整合包的目录结构。不同作者制作的整合包会有细节差异但主流结构非常相似通常包含三个重要区域Pegasus 前端程序区、roms 游戏文件区、media 媒体素材区以及一串 metadata.pegasus.txt 元数据文件。2.1 顶层目录的三块核心内容假设你解压了一个天马整合包常见的目录结构长这样D:\SkyEmu\ ├─ Pegasus\ │ ├─ Pegasus.exe │ ├─ themes\ │ └─ ... ├─ roms\ │ ├─ fc\ │ │ ├─ 魂斗罗.nes │ │ └─ ... │ ├─ md\ │ │ └─ ... │ └─ ... ├─ media\ │ ├─ fc\ │ │ ├─ box_front\ │ │ ├─ video\ │ │ └─ ... │ └─ ... ├─ metadata\ │ ├─ fc.pegasus.txt │ ├─ md.pegasus.txt │ └─ ... └─ ra_data\ ├─ retroarch.exe ├─ cores\ └─ system\这里的Pegasus目录存放前端程序、主题和配置roms目录按平台存放游戏 ROM 文件media目录按平台存放封面、截图、视频等媒体资源metadata目录存放每个平台对应的元数据文件ra_data目录则是 RetroArch 模拟器核心和 BIOS 文件所在的位置。对“只看不玩”的改造来说核心动作非常清楚保留Pegasus、media、metadata并把roms下的真实 ROM 删除或替换成占位文件。在修改之前建议先完整浏览一遍目录结构确认你的整合包没有特殊设计避免误删关键文件夹。2.2 metadata.pegasus.txt 中游戏条目怎么定义天马前端通过 metadata.pegasus.txt 文件来识别游戏条目这是一种纯文本格式基本语法是一行一个键值对。一个最小游戏条目通常包含game关键字、file路径、name名称和若干assets媒体属性。下面是一个简化但典型的示例collection: FC extension: nes game: file: roms/fc/魂斗罗.nes name: 魂斗罗 (日版) description: 经典横版射击游戏玩家扮演特种部队队员突破重重防线。 developer: Konami publisher: Konami genre: 横向射击 release: 1987-02-09 players: 2 assets.box_front: media/fc/box_front/魂斗罗.png assets.video: media/fc/video/魂斗罗.mp4其中file字段告诉前端这个游戏条目对应的 ROM 文件路径assets.box_front指向封面图assets.video指向预览视频。Pegasus 在浏览模式中读取这些元数据并在封面墙中显示游戏名、封面图和简介当用户点击“启动”时前端会根据file字段找到 ROM并调用配置好的模拟器核心运行游戏。所以如果只是希望“能浏览、不能真正运行”可以从file字段入手。最简单的做法是删掉真实的 ROM 文件同时保留 metadata 中的描述信息和媒体路径更稳妥的做法是保留一个 0 字节占位文件确保前端仍能正确识别和显示游戏条目。2.3 媒体资源是怎么和游戏条目绑定的天马前端支持为每个游戏条目添加多种媒体资源。常见的有assets.box_front正面封面、assets.box_back背面封面、assets.screenshot游戏截图、assets.titlescreen标题画面、assets.video预览视频。在一个制作精良的天马整合包中每个游戏几乎都配有封面图和一段短视频这些资源共同构成了吸引人的浏览界面。媒体资源通过相对路径绑定到游戏条目上。路径通常以整合包根目录作为基准例如media/fc/box_front/魂斗罗.png表示根目录下的media/fc/box_front文件夹中的图片。在实际包内路径命名可能略有区别有些作者会使用media/FC大写目录有些则会直接使用中文目录名。在精简时只要确保 metadata 中引用的媒体文件仍然存在前端就能正常显示封面和视频。这也是为什么“删 ROM、保留媒体”能够成立前端浏览体验依赖的是 metadata 和 media而不是 roms 中的文件。理解了这一点后下面就可以设计具体的精简方案。3. 三种“只看不玩”精简方案选型真正操作时有不同的精简思路。有的方案追求绝对干净有的方案更注重兼容性。下面对比三种常见方案你可以根据自己的需求选择。3.1 方案 A直接删除 ROM 文件方案 A 最简单直接打开roms目录把里面的游戏文件全部删除保留media和metadata不动。操作完成后前端启动时会读取 metadata 中定义的游戏条目封面和简介正常展示当你点击某个游戏模拟器会因为找不到 ROM 文件而报错。这个方案的优点是非常省事不需要修改任何 metadata 文件也不会因为改错格式导致前端显示异常。缺点也很明显部分 Pegasus 版本在扫描集合时会把“没有对应 ROM 文件”的游戏条目判定为不可用甚至直接不显示另外如果整合包内置了游戏列表生成工具工具可能认为游戏库不完整。因此方案 A 比较适合那些“即使游戏条目不显示也没关系”的用户。echo off setlocal enabledelayedexpansion set ROM_DIRD:\SkyEmu\roms if not exist %ROM_DIR% goto :eof for /r %ROM_DIR% %%F in (*.nes *.sfc *.md *.bin *.iso *.zip *.7z) do ( del %%F echo removed: %%F ) endlocal前面这段批处理会把常见扩展名的 ROM 文件直接删除。但要注意它也会误删 BIOS 和部分小容量数据文件所以执行前一定先确认roms目录下没有需要保留的 BIOS 或存档文件。3.2 方案 B占位文件法保留可浏览性方案 B 是更推荐的思路不是直接删除 ROM而是把真实的 ROM 文件替换成同名的 0 字节占位文件。这样 metadata 中记录的file路径仍然存在Pegasus 会认为游戏条目对应的文件是存在的于是正常展示封面、简介和视频当你点击启动时模拟器尝试加载 0 字节文件最终会因为文件内容无效而进入报错或返回界面。这种方案的优点是兼容性最好不需要修改 metadata不会因为游戏条目缺失导致前端展示不完整缺点是文件夹中仍然会有大量小文件虽然不占空间但文件数量很多在复制或扫描时会稍微影响效率。实现这个方法可以在命令行中用脚本完成。下面是 Windows CMD 下的批处理方式echo off setlocal enabledelayedexpansion set ROM_DIRD:\SkyEmu\roms if not exist %ROM_DIR% goto :eof for /r %ROM_DIR% %%F in (*.nes *.sfc *.md *.bin *.iso *.zip *.7z) do ( if %%~zF GTR 10485760 ( del %%F type nul %%F echo replaced: %%F ) ) endlocal这段代码会遍历roms目录把所有大于 10MB 的文件替换成 0 字节文件。设置 10MB 阈值主要是为了保护 BIOS、存档等小体积但可能需要的文件。如果你希望覆盖更彻底可以把阈值调低或者增加更多扩展名。3.3 方案 C重写 metadata去除 launch 能力方案 C 更彻底也是工程上最“干净”的做法重新整理 metadata.pegasus.txt只保留游戏名称、简介和媒体资源字段去掉file字段或把file指向一个空路径。这样前端看到的是一个“只能浏览、没有启动目标”的游戏条目从逻辑上就不具备启动能力。不过方案 C 对 metadata 的格式要求比较高。根据 Pegasus 文档file字段通常用于标明可执行文件路径如果完全省略不同版本的前端行为可能不一致。有的版本会正常显示条目有的版本则认为该条目不完整而跳过。所以如果你想采用方案 C最好先在小范围内做实验确认当前 Pegasus 版本的行为再决定是否要批量重写所有 metadata。game: name: 魂斗罗 (日版) description: 经典横版射击游戏玩家扮演特种部队队员突破重重防线。 assets.box_front: media/fc/box_front/魂斗罗.png assets.video: media/fc/video/魂斗罗.mp4如果实验后前端不显示该条目可以退回方案 B或者把file字段改为file: roms/fc/empty/魂斗罗.nes并确保roms/fc/empty/目录中存在一个 0 字节的占位文件。这样既保留条目又不会真正运行游戏。3.4 方案对比表格方案操作难度ROM 空间游戏条目显示启动游戏误删风险A 直接删除 ROM低不占用可能不显示失败中B 占位文件法低不占用正常显示失败低C 重写 metadata高不占用取决于版本失败低综合来看方案 B 是最适合“只看不玩”需求的方案。它既能保留完整的游戏库展示效果又能在前端浏览时获得最佳体验。如果你希望进一步精简 metadata 内容也可以在方案 B 的基础上再对 metadata 做去file的清理实验。4. 完整实战把 300G 整合包瘦身成 50G 预览版下面进入完整实战环节。这里以一个虚拟的整合包目录结构为例演示如何一步步把几百 GB 的资源库改造成“只看不玩”的预览版。操作过程中会用到 Windows 批处理、Python 脚本以及 Pegasus 前端的基本验证方法。4.1 第一步复制目录与备份不管采用哪种精简方案都不建议直接在原始整合包上操作。最理想的做法是先复制一份完整包再处理但整合包体积巨大复制几百 GB 很耗时间。更合理的做法是备份 metadata 目录和 Pegasus 前端配置然后直接对原包操作。这样即使出错也能恢复到原始的元数据状态。备份步骤如下mkdir D:\SkyEmu_Backup xcopy D:\SkyEmu\metadata D:\SkyEmu_Backup\metadata /E /I xcopy D:\SkyEmu\Pegasus D:\SkyEmu_Backup\Pegasus /E /Ixcopy会把metadata和Pegasus目录完整复制到备份目录。后续不管是误删了 metadata还是对前端配置做了不可逆的修改都可以从备份目录恢复。需要说明的是备份这两个目录并不会占用太多空间因为 metadata 只是文本文件Pegasus 目录中也主要是程序文件和主题资源。如果你想换一种更省心的方式也可以使用文件版本管理工具比如 Git对 metadata 目录做版本追踪。这样每次修改前先提交一次之后随时可以回滚。4.2 第二步清理 roms 目录中的大文件备份完成后开始清理 ROM 文件。这里采用方案 B 的“占位文件法”既保留游戏条目的完整性又释放磁盘空间。首先在整合包根目录下打开命令提示符或 PowerShell先定位到roms目录确认里面的文件扩展名分布dir /s /b D:\SkyEmu\roms | findstr /i \.nes$ \.sfc$ \.md$ \.bin$ \.iso$ \.zip$ \.7z$也可以直接查看目录大小powershell -Command Get-ChildItem -Path D:\SkyEmu\roms -Recurse | Measure-Object -Property Length -Sum | Select-Object {NameSizeGB;Expression{[math]::Round($_.Sum / 1GB, 2)}}下一步是把所有大于 10MB 的 ROM 文件替换为 0 字节占位文件。使用前面的批处理脚本即可echo off setlocal enabledelayedexpansion set ROM_DIRD:\SkyEmu\roms if not exist %ROM_DIR% ( echo roms directory not found. goto :eof ) for /r %ROM_DIR% %%F in (*.nes *.sfc *.md *.bin *.iso *.zip *.7z) do ( if %%~zF GTR 10485760 ( del %%F type nul %%F echo replaced: %%F ) ) echo done. endlocal脚本执行后磁盘空间会迅速释放。注意type nul %%F会创建一个 0 字节的新文件并且保留原文件名所以 metadata 中的路径仍然有效。如果你希望彻底不留任何文件可以把这一句改成del %%F但必须接受“游戏条目可能不显示”的风险。4.3 第三步保留 media 目录中的封面、简介、视频roms 清理完成后下一步是确认media目录是完整的。这一步不需要做太多操作但要检查 metadata 中引用的媒体文件是否存在。你可以在整合包根目录运行一个简单的 PowerShell 命令统计media目录下的文件总大小powershell -Command Get-ChildItem -Path D:\SkyEmu\media -Recurse | Measure-Object -Property Length -Sum | Select-Object {NameSizeGB;Expression{[math]::Round($_.Sum / 1GB, 2)}}正常情况下这个大小就是你精简后的主体体积。如果media目录包含大量视频文件那么 50G 的规模是比较合理的。如果发现media目录意外缺少某个平台的封面或视频后续需要补充或修改 metadata 路径否则对应平台的游戏条目会显示空封面。如果目录结构支持你还可以清理media目录中的备份文件、缩略图缓存和多余的主题资源进一步缩小体积。不过要谨慎尽量不要删除media中任何被 metadata 引用的文件。4.4 第四步处理 metadata 中的 file 路径方案 B 不需要修改 metadata因为占位文件保留了原文件名。但如果你的整合包在清理后出现游戏条目不显示的问题可以尝试打开对应的 metadata.pegasus.txt检查file字段是否指向了不存在的路径。示例检查方式打开metadata\fc.pegasus.txt看到类似以下内容file: roms/fc/魂斗罗.nes然后确认D:\SkyEmu\roms\fc\魂斗罗.nes是否存在。如果存在且是 0 字节文件说明占位文件生效前端可以正常展示条目。如果文件不存在说明脚本没有覆盖到这类文件需要补充扩展名或直接创建空目录和空文件。mkdir D:\SkyEmu\roms\fc\empty 2nul type nul D:\SkyEmu\roms\fc\empty\魂斗罗.nes对于少量缺失文件手工补一下很快。如果缺失数量很多就需要写一个批量工具来检查和修复下一章会给出 Python 脚本。4.5 第五步启动 Pegasus 验证效果完成前四步后启动 Pegasus 前端检查是否能顺利进入浏览界面。正常情况应该是封面墙或游戏列表能显示出完整的游戏条目每个条目都有封面图和文字简介点击游戏后能播放预览视频当你尝试点击“启动”按钮运行时前端要么提示找不到模拟器核心要么提示 ROM 文件错误最终无法进入游戏。验证步骤可以这样安排双击Pegasus\Pegasus.exe启动前端。进入各个平台合集确认游戏条目仍然存在。随机点开几个游戏查看封面图、简介、视频是否正常显示。点击“启动”或“Play”按钮确认游戏不会意外运行。查看磁盘空间确认整合包已经从几百 GB 缩减到约 50G。如果前端在扫描阶段就卡住或一直转圈可能是 metadata 中引用的 ROM 路径不存在且占位文件没有生效。此时回到第四步检查缺失文件即可。5. 批量脚本用 Python 自动完成瘦身与校验如果整合包中游戏数量非常多手工检查和修改 metadata 会很痛苦。下面提供两个 Python 脚本分别用于“批量替换 ROM 为占位文件”和“校验媒体资源完整性”。脚本思路通用你可以根据实际目录结构调整。5.1 清理脚本设计思路脚本需要解决三个问题一是准确读出 metadata 中引用的文件路径二是根据路径执行删除和占位操作三是避开 BIOS、存档等不应该被清空的小文件。实现时使用 Python 标准库即可不需要额外安装第三方依赖。脚本流程如下遍历metadata目录下的所有.pegasus.txt文件。用正则表达式匹配file:开头的行提取 ROM 相对路径。将相对路径拼接成绝对路径。判断文件是否存在、是否大于预设阈值。满足条件时删除原始文件并创建 0 字节占位文件。最后打印处理统计信息。为了避免误删 BIOS 文件脚本可以排除路径中包含bios、system、save等关键词的文件。你可以在脚本开头维护一个排除关键词列表。5.2 Python 脚本删除 ROM 并生成占位文件import re import os from pathlib import Path BASE_DIR Path(rD:\SkyEmu) METADATA_DIR BASE_DIR / metadata ROM_FILE_THRESHOLD 10 * 1024 * 1024 # 10MB # 需要排除的目录关键词 EXCLUDE_KEYWORDS (bios, system, saves, save, cheats) file_pattern re.compile(r^file:\s*(.)$, re.IGNORECASE) def should_exclude(path: Path) - bool: lower_parts [part.lower() for part in path.parts] return any(kw in .join(lower_parts) for kw in EXCLUDE_KEYWORDS) def trim_rom(rom_path: Path): if should_exclude(rom_path): print(fskip excluded: {rom_path}) return if not rom_path.exists(): print(fnot exists: {rom_path}) return if rom_path.stat().st_size ROM_FILE_THRESHOLD: print(fskip small file: {rom_path}) return try: rom_path.unlink() rom_path.touch() print(freplaced: {rom_path}) except OSError as exc: print(ferror: {rom_path}: {exc}) if __name__ __main__: for meta_file in METADATA_DIR.glob(*.pegasus.txt): print(fparsing: {meta_file.name}) for line in meta_file.read_text(encodingutf-8, errorsignore).splitlines(): m file_pattern.match(line.strip()) if m: rel m.group(1).strip() # 跳过外部路径或绝对路径 if : in rel or rel.startswith(/): continue rom_path (BASE_DIR / rel).resolve() trim_rom(rom_path)这段脚本执行后会把所有被 metadata 引用的大体积 ROM 替换成 0 字节占位文件。路径中的中文、空格都能正常处理。如果你使用的整合包目录结构不是BASE_DIR / file这种基准路径关系需要根据实际情况调整拼接逻辑。5.3 Python 脚本检查 metadata 资源完整性清理 ROM 之后还需要确保封面和视频资源没有丢失。下面的脚本会遍历 metadata 中的assets字段并检查对应媒体文件是否存在。如果存在缺失脚本会输出缺失清单方便后续补充。import re from pathlib import Path BASE_DIR Path(rD:\SkyEmu) METADATA_DIR BASE_DIR / metadata asset_pattern re.compile(r^assets\.\w:\s*(.)$, re.IGNORECASE) missing_assets [] total_checks 0 if __name__ __main__: for meta_file in METADATA_DIR.glob(*.pegasus.txt): for line in meta_file.read_text(encodingutf-8, errorsignore).splitlines(): m asset_pattern.match(line.strip()) if not m: continue rel m.group(1).strip() if : in rel or rel.startswith(/): continue asset_path BASE_DIR / rel total_checks 1 if not asset_path.exists(): missing_assets.append((meta_file.name, rel)) print(ftotal asset references: {total_checks}) print(fmissing asset count: {len(missing_assets)}) for meta_name, rel in missing_assets[:50]: print(f {meta_name}: {rel})这个脚本只做检查和报告不会删除任何文件可以放心运行。如果你发现大量缺失很可能是 metadata 中使用了与当前整合包不同的资源目录命名规则需要对比原包后做批量替换。5.4 运行结果示例假设脚本运行后的输出如下parsing: fc.pegasus.txt replaced: D:\SkyEmu\roms\fc\魂斗罗.nes replaced: D:\SkyEmu\roms\fc\超级玛丽.nes parsing: md.pegasus.txt replaced: D:\SkyEmu\roms\md\幽游白书.md ... total asset references: 8320 missing asset count: 2 fc.pegasus.txt: media/fc/box_front/冒险岛.png md.pegasus.txt: media/md/video/太空战士.mp4对于缺失的 2 个媒体文件你可以判断是因为原整合包本身缺失还是因为文件名大小写、编码问题导致的路径不一致。如果是原包缺失可以忽略如果是编码问题需要把 metadata 和实际文件名统一成同一种编码规范。6. 常见问题与排查思路在实际操作中你会遇到各种奇怪的现象。下面整理几个高频问题包含原因分析和解决思路。问题现象常见原因解决思路清理后游戏条目直接消失Pegasus 扫描时判断 file 文件不存在跳过条目使用 0 字节占位文件法确保 file 指向存在封面图能显示视频无法播放视频文件缺失或 metadata 中 video 路径不对检查 assets.video 对应的文件是否存在核对大小写整个前端启动后一直转圈metadata 中引用了大量不存在的路径扫描缓慢用 Python 脚本校验 metadata修复或删减缺失条目体积没有明显变小还有未引用的 ROM 或冗余 BIOS、缓存文件用磁盘扫描工具找出大文件确认是否被 metadata 引用删除文件后磁盘空间没有释放文件被放入回收站或仍有进程占用清空回收站关闭 Pegasus 和 RetroArch 进程点击启动后模拟器报错0 字节占位文件无法被模拟器识别这是“只看不玩”的预期行为不影响浏览如果是“启动后模拟器报错”的情况其实不需要处理因为那就代表你已经成功把一个完整整合包改成了“只看不玩”的预览版。如果你希望保留少量可玩的游戏可以在清理前先把这几个游戏手动复制到另一个目录并在 metadata 中把它们的file路径指向新目录。还有一类问题是脚本误删造成的。例如有人直接删除整个roms目录结果连 RetroArch 需要的 BIOS 文件也一并删了。这类问题最好预防而不是事后修复。建议在清理前先用脚本输出“将被替换文件清单”人工确认清单里没有 BIOS、存档、金手指等关键文件后再执行清理。# 输出待处理文件的预览清单 import re from pathlib import Path BASE_DIR Path(rD:\SkyEmu) METADATA_DIR BASE_DIR / metadata file_pattern re.compile(r^file:\s*(.)$, re.IGNORECASE) for meta_file in METADATA_DIR.glob(*.pegasus.txt): for line in meta_file.read_text(encodingutf-8, errorsignore).splitlines(): m file_pattern.match(line.strip()) if m: rel m.group(1).strip() if : in rel or rel.startswith(/): continue p BASE_DIR / rel if p.exists() and p.stat().st_size 10 * 1024 * 1024: print(p)如果你把这段脚本的输出保存成to_trim.txt再人工扫一眼就能大幅降低误删风险。7. 工程实践与法律提醒把整合包瘦身成“只看不玩”的过程看起来只是删文件但如果想做得稳定、可维护还是有一些工程层面的经验可以总结。7.1 保留可玩性的优雅做法目录 junction / 符号链接有些用户只是暂时想省空间但未来可能又想玩某个游戏。针对这种情况不建议直接删除 ROM而是把 ROM 移动到另一块硬盘或移动硬盘然后在原整合包位置创建目录链接。Windows 下可以用mklink /J创建目录链接mklink /J D:\SkyEmu\roms E:\SkyEmu_ROMs\roms这样做的效果是天马前端看到的roms目录仍然存在所有 metadata 路径都不用修改平时如果不挂载移动硬盘前端里的游戏条目因为找不到文件而无法启动浏览功能不受影响需要玩游戏时插上移动硬盘就可以继续完整体验。这种方式适合“偶尔玩一下”的用户避免了做两个整合包的麻烦。如果你只是追求纯粹的“只看不玩”直接使用占位文件法更省心。7.2 如何维护“只看不玩”库的长期一致性整合包在长时间使用后可能会出现媒体文件缺失、metadata 路径错误等问题。为了保持一致性建议你建立一套简单的维护流程每次新增或删除游戏时都同步检查 metadata 中的file和assets是否仍然有效。使用脚本定期校验媒体资源把缺失清单输出成日志。对 metadata 目录做版本控制可以用 Git 或普通备份目录确保改坏了能回滚。如果整合包需要分享给其他人建议附带一份“体积精简说明”解释为什么没有本体 ROM。这些习惯可以显著降低后期维护成本尤其当游戏数量达到几千个时手工检查几乎不现实必须依赖脚本。7.3 版权与合规边界最后必须认真强调版权问题。天马整合包中的前端程序、主题资源、模拟器核心通常遵循各自的开放许可但游戏 ROM、部分 BIOS、游戏封面和视频素材不一定允许随意传播。本文讨论的“删 ROM、留媒体”本质上是对已有整合包做文件整理你不能因为做了精简就认为自己拥有了这些内容的分发权。在实际使用中建议始终遵循几个原则第一只处理你拥有合法备份、或已经获得授权的内容第二不要公开分享整合包中的 ROM 或未经授权的媒体文件第三如果整合包作者明确声明了使用限制请遵守作者的规定。技术本身没有善恶但使用方式需要自己负责。8. 总结与下一步扩展到这里一个“只看不玩”的天马精简版就改造完成了。你掌握了天马整合包的目录结构、metadata.pegasus.txt 的基础语法、ROM 与媒体资源的绑定关系也学会了用批处理和 Python 脚本批量删除 ROM、生成占位文件、校验媒体资源完整性。如果你的目标是只浏览封面、简介和预览视频那么这套方案可以帮你把整合包体积从几百 GB 压缩到 50G 左右。下一步可以继续研究几个方向一是学习 Pegasus 前端的主题配置把精简包界面进一步美化做成类似数字博物馆的展示墙二是研究 RetroArch 核心和 BIOS 的配置逻辑理解“可玩版”和“只看不玩版”之间的差异这样未来需要恢复某几个游戏的游玩功能时更加得心应手三是尝试为精简包设计一套自用的数据校验脚本把 metadata 和媒体文件的完整性检查自动化。实际操作时请一定先备份 metadata 和前端配置再执行任何删除操作。如果你在精简过程中遇到游戏条目不显示、视频无法播放、体积压缩不明显等问题优先回到 metadata 和占位文件这两条主线上排查。希望这篇教程能帮你省下几百 GB 的硬盘空间同时还能保留一个漂亮又好用的怀旧游戏资料库。