讲个故事
这是发生在我的朋友和我传资料时遇到的事:我想给他传一个压缩包过去,我的文件夹里面是长这样的:

是本蒟蒻的codeforces做题代码
在我直接压缩,传给我朋友后,他解压缩后看到的却是这样的

CF文件夹变成了一堆乱码,还莫名其妙出现了_MACOSX文件夹,而且还出现.DS_Store和._.DS_Store两个奇奇怪怪的以.作为前缀文件
让我的朋友感到非常困惑:你发了个什么玩意
1.关于为什么乱码
这个好解释,因为我的Mac对文件夹直接右键压缩用的是UTF-8编码,而我朋友直接解压缩用的是UTF-16LE编码,两种编码方式不同自然会得到一堆乱码
当然也好解决:解压缩的用户使用UTF-8编码解压缩就可以了,一般7z和WinRAR都可以做到,但是并不能解决出现.DS_Store的迷惑性问题
2.关于为什么会出现.DS_Store
我们看到以.开头,说明是一个隐藏文件,一般可以在终端中输入chflags hidden +要隐藏文件的路径即可隐藏文件(这里输入路径直接把文件拖进终端会快很多)

想要在文件夹中显示出隐藏的文件可以在隐藏文件所忽目录下使用快捷键Command+Shift+。即可使其显现(以我的中日英三国语言混读挑战为例子

但是我们并没有发现显示出的隐藏文件中有.DS_Store。
实际上.DS_Store是Mac资源文件。英文全称是 Desktop Services Store(桌面服务存储)它是一种由macOS系统自动创建的隐藏文件,存在于每一个用访达打开过的文件夹里面,我们可以用ls -al命令列出当前目录所有文件的方式看到它。

_MACOSX文件夹则不一样,它是由压缩自动创建的文件夹。在 MacOS 下的每个文件都有记录其媒体信息的文件:.DS_Store。你移动和复制文件的时候这个记录文件会跟随你操作的文件一起移动和复制。存储这些信息记录文件产生的文件夹就是 _MACOSX。这两个奇奇怪怪的东西既然对Mac用户都隐藏了那大概是没什么用,实际上对Win用户来说是真的没什么用,直接删除掉也不影响文件传输
但事物的存在必定有其存在的意义,.DS_Store的作用是是存储当前文件夹在桌面显示相关方面的一些自定义属性,包括文件图标的位置、文件夹上次打开时窗口的大小、展现形式和位置等。对文件夹的显示有帮助
它带来的坏处除了造成解压缩人的困惑外还有更严重的:信息泄漏。MacOS几乎在所有的文件夹都创建了.DS_Store文件,如果Mac用户随随便便将自己的文件传到互联网极易造成信息泄漏,通过解析这一文件,会发现数据库备份,配置文件,以及一些缓存文件,甚至是密钥
3.解决办法
容易想到在每个文件夹中删除.DS_Store是个办法,但是文件夹甚多,访达也不可能不用,况且这个文件也有其存在的意义,占用的存储空间极小。所以我们不一定要删除本地的.DS_Store文件,而是删除压缩后压缩包中的.DS_Store文件。在这里我推荐一个压缩软件:KeKa

下载地址是:https://www.keka.io/en/(免费!!!)
它可以选择排除Mac资源文件,这样在压缩后的文件里就没有上面两个奇奇怪怪的东西,而且用这个压缩后我的朋友直接解压也不会出现乱码。压缩文件时直接把文件拖进这个窗口就可以,压缩好后的压缩包路径在与原文件夹路径一致

4.总结
这些文件直接删除对解压缩的人没有任何影响,对压缩的人影响不大。删除是有办法的不过我觉得麻烦了(可以自行百度,方法蛮多的)我推荐使用第三方压缩软件处理
0 条评论