【发布时间】:2012-01-15 13:50:22
【问题描述】:
我正在尝试使用 ruby 脚本为 Mac OS 上的文件设置文件系统创建时间。
在 Mac OS X 上,'ctime' 代表最后一次 inode 修改时间,而不是文件创建时间,因此使用 ruby 的 File.utime() 设置 ctime 无济于事。
使用这个提示 [http://inessential.com/2008/12/18/file_creation_date_in_ruby_on_macs] 我可以检索文件的创建时间:
Time.parse(`mdls -name kMDItemContentCreationDate -raw "#{filename}"`)
...但是知道如何使用 ruby 设置它吗?
-- 更新--
好的,我想我可以实际上用 ruby 中的 File.utime 做到这一点。
尽管 Mac OS 技术上不使用 ctime 来跟踪文件创建时间,但当您使用 utime 更新 ctime(连同 mtime,必须同时设置)文件系统似乎也神奇地根据kMDItemContentCreationDate更新创建时间。
所以要将 filename 设置为 2010 年 10 月 1 日的 ctime 和 2010 年 10 月 2 日的 mtime:
File.utime(Time.strptime('011010', '%d%m%y'), Time.strptime('021010', '%d%m%y'), filename)
【问题讨论】:
-
您可能希望发布您的“更新”解决方案作为答案,因此这个问题不需要保持开放(和“未回答”)
-
你明白这不是可移植的。 Linux 不支持存储创建时间。 ctime 也不是创建时间,它是根据目录“更改”时间,而不是文件本身。这可以解释它:stackoverflow.com/a/4009369/128421
-
使用
utime设置文件时间不会改变使用mdls -name kMDItemContentCreationDate -raw返回的值。
标签: ruby macos file filesystems ctime