Tôi đang cố gắng đặt thời gian tạo hệ thống tập tin cho một tệp trên Mac OS bằng tập lệnh ruby.Làm cách nào để đặt thời gian tạo tệp bằng ruby trên Mac OS?
Trên Mac OS X 'ctime' đại diện cho lần sửa đổi inode cuối cùng thay vì thời gian tạo tệp, do đó, sử dụng File.utime() của ruby để đặt thời gian sẽ không trợ giúp.
Sử dụng gợi ý này [http://inessential.com/2008/12/18/file_creation_date_in_ruby_on_macs] Tôi có thể lấy thời gian tạo một file:
Time.parse(`mdls -name kMDItemContentCreationDate -raw "#{filename}"`)
... nhưng bất kỳ ý tưởng về làm thế nào để cài đặt nó sử dụng ruby?
- CẬP NHẬT -
Được rồi, tôi nghĩ tôi có thể thực sự làm điều này với File.utime
trong ruby.
Mặc dù ctime được về mặt kỹ thuật không được sử dụng bởi Mac OS để theo dõi thời gian tạo tập tin, khi bạn sử dụng utime
để cập nhật các ctime (cùng với mtime, mà phải được đồng thời thiết lập) hệ thống tập tin dường như kỳ diệu cũng cập nhật thời gian tạo theo kMDItemContentCreationDate
.
Vì vậy, để thiết lập filename đến một ctime của ngày 01 tháng 10 2010 và một mtime của ngày 02 tháng 10 2010:
File.utime(Time.strptime('011010', '%d%m%y'), Time.strptime('021010', '%d%m%y'), filename)
bạn có thể muốn đăng 'cập nhật' giải pháp của mình làm câu trả lời, vì vậy câu hỏi này không cần phải mở (và 'chưa trả lời') – robustus
Bạn hiểu điều này không phải là di động. Linux không hỗ trợ lưu trữ thời gian tạo. Ngoài ra ctime không phải là thời gian tạo, nó là "thay đổi" thời gian theo thư mục, không phải cho chính tệp đó. Điều này có thể giải thích: http://stackoverflow.com/a/4009369/128421 –
Đặt thời gian tệp bằng cách sử dụng 'utime' KHÔNG thay đổi giá trị được trả về bằng cách sử dụng' mdls -name kMDItemContentCreationDate -raw'. –