You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python获取MacOS「Utilities」文件夹内容?

问题:Mac下访问/Applications/Utilities目录仅返回.localized文件,无法获取实际应用

问题详情

  • 执行Path('/Applications/Utilities').iterdir()或os.listdir()遍历目录时,仅得到.localized这一个文件
  • 访达中该目录明明显示有Disk Utility、Airport Utility等大量应用程序
  • 自定义的递归查找应用函数find_apps在其他目录(如Python 3.11文件夹)正常工作,唯独在此目录失效

函数代码示例:

def find_apps(directory_item: Path, nested_apps: list) -> None:
    if item_is_app(directory_item):
        nested_apps.append(directory_item)
        return

    if item_is_directory(directory_item):
        for item in directory_item.iterdir():
            find_apps(item, nested_apps)
    return

原因分析

Mac系统中,/Applications/Utilities属于受保护的系统目录,其真实内容被系统的文件系统重定向机制转移到了/System/Applications/Utilities路径下。直接访问原路径只会进入一个包含.localized文件的“占位”目录,而非实际存放应用的位置。

解决方法

1. 访问真实路径

直接遍历/System/Applications/Utilities即可获取所有应用:

from pathlib import Path
utilities_path = Path('/System/Applications/Utilities')
for item in utilities_path.iterdir():
    print(item.name)

2. 修改递归函数适配路径

在find_apps函数中加入路径重定向处理,自动切换到真实路径:

def find_apps(directory_item: Path, nested_apps: list) -> None:
    # 处理Utilities目录的系统重定向
    if directory_item.resolve() == Path('/Applications/Utilities').resolve():
        directory_item = Path('/System/Applications/Utilities')
    
    if item_is_app(directory_item):
        nested_apps.append(directory_item)
        return

    if item_is_directory(directory_item):
        for item in directory_item.iterdir():
            find_apps(item, nested_apps)

3. 关于SIP的说明

系统完整性保护(SIP)是Mac的安全机制,禁止修改系统核心目录。不建议关闭SIP来访问原路径,这会降低系统安全性。

内容的提问来源于stack exchange,提问作者Mustafa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 12:33:18