区分大小写的系统上安装 Adobe 系列真的不可能吗?

2020-07-06 22:39:28 +08:00
 phoulx
上次抹盘升级 Catalina 的时候,故意选择了 case-sensitive (并非工作需要,衹是觉得这样比较舒服),一直用着也没问题,像 OneDrive 和 Steam,虽然不能直接用,但 app 本身是可以直接装的,衹要另外建一个 case-insensitive Volume,再软链接一下文件夹,就可以正常使用。
但 Adobe 系列真是恶心了,官网下载的 dmg,打开後直接不能装,提示不支持 case-sensitive Volume,让我重选一个 Volume,可下面就一个「 Quit 」,根本不给我选择安装到哪个 Volume 。

在网上搜到有人给了解决方案,不过是好几年前了: https://github.com/tzvetkoff/adobe_case_sensitive_volumes
大致是通过创建一个 SparseBundle Volume,然後 Makefile 编译一个文件以欺骗 Adobe 的检查宗卷大小写的操作。我照着步骤尝试了下,并且参考了两位网友的改进,但最终还是失败,可能原因是所用到的 FSGetVolumeParms 方法已经失效,不知道 macOS 现在有什么 API 可以获取磁盘信息,也不清楚 Adobe 现在是如何检查分区的。

因为对 macOS 系统层面不熟悉,所以基本放弃了。但要我抹盘重新选择不区分大小写,肯定是不可能的。现在打算开一个 case-insensitive Volume 新装一个 macOS beta,再在上面装 Adobe 系列,顺便体验一下 Big Sur 吧。
5169 次点击
所在节点    macOS
26 条回复
ipwx
2020-07-07 10:41:14 +08:00
@vk42

> 怎么把 case insensitive 的文件系统当 case sensitive 用?同时有 case, Case 两个文件,你要给 Case 起个别名?

我的意思是你无论自己创建文件,还是写程序创建文件,都避免创建这种不同 case 相同名称的文件。如果你自己恪守这种准则,那么日常体验中不会感觉它是 case insensitive 的文件。这就是我所谓的“把 case insensitive 的文件系统当 case sensitive 用”。实际上这是一种良好而且必要的行为准则,如果你还要用 Windoge 的话。而且你写程序的话,保证 Windoge 通用性也是好习惯吧?

> 这和慢不慢有什么关系,无非是在文件系统层统一化还是在 API 层统一化。

如果 FS 底层没有记录 case insensitive 的信息,你要让 FS 在应用层面去寻找相同文件名,那么你就需要 O(n) 的比对。不然就可以通过散列等方式优化寻址。当然,各个 FS 有没有做我不知道,但是至少这种时间开销上的差距,理论上是存在的。
vk42
2020-07-07 10:42:43 +08:00
@tianshilei1992 主要是兼容性问题,默认系统是 CI 的话,有些应用可能对文件名大小写没那么注意,举个例子一个 app 在一个地方用 Case.txt 为文件名写出去的文件,另一个地方按 case.txt 打开,在 CS 的系统上就会报找不到文件……
vk42
2020-07-07 10:54:46 +08:00
@ipwx
这个你得跟 Adobe 和 Steam 他们说去啊,用户又没得选……

这个性能问题确实可能存在,不太清楚 NTFS 实际怎么实现的,应该是在文件 metadata 里面加上 CI 信息。看了下 WINE 在 CS 文件系统上实现时也有类似问题: https://wiki.winehq.org/Case_Insensitive_Filenames
tianshilei1992
2020-07-07 11:01:26 +08:00
@vk42 所以说还是应用程序的问题,是应用程序本身就没有按照系统的规则来…
MaxLi77
2020-07-07 11:35:48 +08:00
没必要全盘区分大小写,apfs 可以分配一块共享的 区分大小写的 空间。开发者自己程序不规范,你也没法解决,别给自己找麻烦。。
TrickerPan
2020-07-21 15:59:01 +08:00
@ipwx

你不是程序猿吧?

1. 实际程序在编译的时候,大写和小写区别很大,case insensitive 创建文件夹默认全字母小写,你认为你的文件名是驼峰,实际上呵呵呵。
2. 现在服务器基本都是 Linux 的,用了 CVS 自动帮你转换了还行,不转换的话就很有意思了。我遇到过有人用 case insensitive,创建文件的时候,手快了全打成了小写,然后重命名了,传到服务器上死活找不到这个文件了。结果看了下 log,人家在服务器上还是小写。
3. 不要说规范啊、习惯啊什么的,谁还没个手误的时候?

所以 case insensitive 不能当作 case sensitive 来用。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/687716

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX