如何在Mac OS上使用ruby设置文件创建时间?

dj.*_*dj. 9 ruby filesystems macos file ctime

我正在尝试使用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}"`)
Run Code Online (Sandbox Code Playgroud)

...但是有关如何使用ruby设置它的任何想法?

- 更新 -

好吧,我想我实际上做到这一点File.utime的红宝石.

尽管Mac OS在技术上并未使用ctime来跟踪文件创建时间,但当您使用utime更新ctime(以及必须同时设置的mtime)时,文件系统似乎神奇地也会更新创建时间kMDItemContentCreationDate.

因此,要将文件名设置为2010年10月1日的ctime和2010年10月2日的mtime:

File.utime(Time.strptime('011010', '%d%m%y'), Time.strptime('021010', '%d%m%y'), filename)
Run Code Online (Sandbox Code Playgroud)

ilt*_*mpo 12

这个方法有一个Ruby解决方案utime.但是,你必须设置修改时间(修改时间)和访问时间(atime)一次.如果您想保持访问时间,可以使用:

File.utime(File.atime(path), modification_time, path)
Run Code Online (Sandbox Code Playgroud)

请参阅Ruby核心文档.