pac*_*low 18 compression hfs+ macos
在 Finder 中,我注意到如果我复制了一些 .app 文件(在 Applications 文件夹中),Finder 将显示复制的 .app 文件与原始文件的大小不同。我复制的所有 .app 文件都不会出现这种文件大小差异,但似乎 .app 文件越大,副本显示的大小与原始文件不同的可能性就越大。这里有些例子:
GarageBand.app - 381.7 MB
GarageBand copy.app - 373.2 MB
iMovie.app - 695.3 MB
iMovie copy.app - 635.4 MB
Install Xcode.app - 1.81 GB
Install Xcode copy.app - 1.57 GB
Run Code Online (Sandbox Code Playgroud)
现在我是 Mac 新手,在我注意到这个文件大小差异问题后,我发现 .app 文件实际上不是文件 - 它们实际上是目录,但 Finder 将它们显示为文件。所以我想也许复制过程没有复制原始 .app 目录的所有内容,这解释了“文件大小”的差异。但是后来我下载并安装了 DeltaWalker,这是一个文件/文件夹差异工具,DeltaWalker 说重复的 .app 目录与原始 .app 目录完全相同。因此复制过程运行良好,因此似乎是 Finder 报告文件大小的问题。
我还使用“du”命令检查了终端中目录的大小,这也显示了原始目录和重复目录之间的大小差异:
du -k /Applications/GarageBand.app/
212868  /Applications/GarageBand.app/
du -k /Applications/GarageBand\ copy.app/
397880  /Applications/GarageBand copy.app/
du -k /Applications/iMovie.app/
629644  /Applications/iMovie.app/
du -k /Applications/iMovie\ copy.app/
700500  /Applications/iMovie copy.app/
du -k /Applications/Install\ Xcode.app/
1771864 /Applications/Install Xcode.app/
du -k /Applications/Install\ Xcode\ copy.app/
1772228 /Applications/Install Xcode copy.app/
Run Code Online (Sandbox Code Playgroud)
此外,它不仅仅是 .app 目录。我复制了我的 /Developer/Library 目录,这是 du 所说的:
du -k /Developer/Library/
320784  /Developer/Library/
du -k /Developer/Library\ copy/
399868  /Developer/Library copy/
Run Code Online (Sandbox Code Playgroud)
那么谁能解释为什么 Mac OS X 似乎没有正确报告目录大小?这是一个错误(很难相信这么简单的事情),还是我错过了什么(作为一个新的 Mac 用户)?
(我正在运行 Mac OS X Lion 10.7.2)
更新以回应 elofturtle:
最奇怪的是,Finder 没有一致性。我刚刚制作了 GarageBand.app 的 2 个副本,然后制作了其中一个副本的 2 个副本。Finder 以不同的大小显示每个重复项:
GarageBand.app - 381.7 MB
GarageBand copy.app - 357.6 MB (duplicate of GarageBand.app)
GarageBand copy 2.app - 353.9 MB (duplicate of GarageBand.app)
GarageBand copy 3.app - 378.2 MB (duplicate of GarageBand copy 2.app)
GarageBand copy 4.app - 329.1 MB (duplicate of GarageBand copy 2.app)
Run Code Online (Sandbox Code Playgroud)
另请注意,“GarageBand copy 3.app”大于“GarageBand copy 2.app”,而“GarageBand copy 4.app”小于“GarageBand copy 2.app”。那一定是 Finder 中的一个错误。
以下是“du -k”对所有这些人的评价:
212868  /Applications/GarageBand.app/
397880  /Applications/GarageBand copy.app/
397880  /Applications/GarageBand copy 2.app/
397880  /Applications/GarageBand copy 3.app/
397880  /Applications/GarageBand copy 4.app/
Run Code Online (Sandbox Code Playgroud)
至少它说所有重复的大小相同,但它们与原始大小不同。
Læt*_*æti 13
差异来自不同的原因:不同的计数方式、不同的工具、压缩以及看起来像错误的东西。
您看到的第一个大小差异似乎是Finder 中的一个错误。Finder 显示的文件大小以某种方式实时计算并缓存在.DS_Store文件中。出于某种原因,在复制大型应用程序/文件夹时,Finder 在复制过程中计算其大小并缓存不完整的大小。然后它会在 Finder 窗口中将该大小显示为灰色,灰色意味着Finder 知道自上次计算大小以来内容已更改,但尚未重新计算。
我发现让它正确重新计算大小的唯一方法是删除.DS_Store应用程序文件夹中的文件,然后退出 Finder(例如从活动监视器)并再次重新启动它(从 Dock 图标)。如果您不删除该.DS_Store文件,它仍然保持灰色。也许等待一段时间(数小时、数天、重启……)会让 Finder 自行完成。
之后,您应该会看到 Finder 报告的所有尺寸都相同。
所以是的,它看起来像是一个 Finder 错误,至少在 OSX Lion 中(这里用 10.7.4 测试,Finder 版本 10.7.3)。您还可以看到该线程报告相同类型的行为。
然后,让我们考虑一下du工具。起初,我认为我们看到的差异可以用被复制项目的逻辑和物理大小之间的差异来解释。逻辑大小是项目的实际大小,这意味着它包含的每一位信息加在一起。物理大小是磁盘上项目的大小,其中每个信息位都写入磁盘扇区。
例如,包含单个字符的文件最终将具有 1 字节的逻辑大小,但实际写入磁盘时的物理大小为 512 字节甚至 4096 字节。物理大小通常大于逻辑大小(取决于磁盘或文件系统的实际扇区/块大小)。这在另一个线程中有更详细的解释。在稀疏文件的情况下,逻辑大小可能更大,但 HFS+ 似乎不支持这样的功能。
du仅显示物理大小(您可以告诉它 BLOCKSIZE 是什么)。您可以看到报告的大小du始终比原始大小更大(或者,例外情况下,相同)。这是因为文件系统和磁盘空间碎片。当您复制文件(实际上这里是一堆文件,因为应用程序是一个目录)时,磁盘上会分配新扇区,并且随着碎片的发生,使用的块数通常高于原始项目的块数。有些人称之为File Slack。
现在,回到 Finder。如果您打开您复制的应用程序的获取信息窗口,您将看到 Finder 实际上报告了您选择的项目的逻辑和物理大小。那么这是有道理的。du如果您进行一些数学计算,您甚至可以比较 Finder 报告的物理大小和由 Finder 报告的物理大小。
为什么要做一些数学?因为 Finder 以 kB、MB 或 GB 显示文件大小,du其中以 kiB、MiB 或 GiB 报告它们。这些是应该用于计算和显示数字信息单位的IEC 二进制前缀。
但是,实际上,我不确定这里是否涉及 File Slack,还有其他事情。  HFS+ 卷允许以透明方式进行压缩,Apple 将其用于操作系统安装的原始项目。然后,当使用标准工具复制文件时,不再使用压缩(默认情况下,为了向后兼容)。如果要对这些文件保持压缩,则需要使用该ditto命令而不是cp或任何 Finder 操作。本评论对此进行了解释。
这是使用不同技术复制 iTunes.app 的输出。您会看到同上使应用程序的大小完全相同,并保留了压缩,而cp没有。您甚至可以删除不需要的拱门的二进制文件,然后减小整个尺寸):
antoine@amarante:/Applications$ du -ms iTunes.app/
281 iTunes.app/
antoine@amarante:/Applications$ cp -a iTunes.app/ iTunes-copy.app/
antoine@amarante:/Applications$ ditto iTunes.app/ iTunes-ditto.app
antoine@amarante:/Applications$ ditto --arch x86_64 iTunes.app/ iTunes-64.app
antoine@amarante:/Applications$ du -ms iTunes*
236 iTunes-64.app
289 iTunes-copy.app
281 iTunes-ditto.app
281 iTunes.app
Run Code Online (Sandbox Code Playgroud)
感谢 @DanPritts对我的补充帖子的回答。
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           24398 次  |  
        
|   最近记录:  |