LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1604|回复: 0

[恭贺新版][这算转帖还是原创?] 在Mac OS X中使用zip的警惕之处

[复制链接]
发表于 2007-1-21 19:17:09 | 显示全部楼层 |阅读模式
[color="Red"]A caution on using command-line zip for backups 讨论了在Mac OS X中使用Finder的上下文敏感菜单中的 Create Archive of "what"[color="Blue"]/usr/bin/zip 创建zip压缩档的区别,提醒我们需要小心的地方。

在用Finder上下文菜单中的归档操作并不是调用 [color="Blue"]/usr/bin/zip 生成压缩档——这可以通过  [color="Blue"]/bin/ps[color="Blue"]/usr/bin/top 做个试验验证——而是通过 [color="Blue"]/System/Library/CoreServices/BOMArchiveHelper.app 实现的。作者表示, [color="Blue"]/usr/bin/zip 在两点存在缺陷:

  • 无法在压缩档中保存文件的HFS+资源派生;
  • [color="Blue"]/usr/share/man/man1/zip.1 中描述的不符。


hayne在回复中给出了解释:首先作者对 [color="Blue"]/usr/bin/zip 手册中的所谓的错误其实来源于概念不清导致的一个误解,在其中几个章节中出现了“MacOS”字样混淆了作者,而“MacOS”其实是指“Mac OS Classic”即OS9以及之前的系统,和“Mac OS X”关系相差甚远(据我所知OS9和UNIX没有关系);而 [color="Blue"]/usr/bin/zip 无法保存资源派生是因为相比其它UNIX实用工具显然它未被苹果公司改良,其他UNIX工具通过加入来自Darwin的libc中的copyfile()函数来实现对资源派生的保留(和其它特性,这是必然)。因而要查看一个utility是否支持资源派生可以通过查看 [color="Blue"]/usr/bin/nm 的输出来确认:

  1. $ nm /bin/cp | grep copyfile
  2.          U _copyfile
  3. $ nm /usr/bin/tar | grep copyfile
  4.          U _copyfile
  5. $ nm /usr/bin/zip | grep copyfile
  6. $
复制代码

ekc给了一个替代 [color="Blue"]/usr/bin/zip 的好方法:使用 [color="Blue"]/usr/bin/ditto 创建zip压缩档——
  1. $ ditto -c -k --sequesterRsrc PATH PATH.zip
复制代码

当然,如果你的文件根本没什么资源派生可言, [color="Blue"]/usr/bin/zip 足以应付。

PS. 算是一个总结,像我这种习惯命令行做事儿(其实也未必只适用于此,譬如当需要批处理而更习惯传统UNIX工具而不是AppleScript或者Automator的时候)的人可能会遇到些问题。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表