9

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 でこれを行うことができると思います。File.utime

ctime は Mac OS でファイル作成時間を追跡するために技術的には使用されていませんが、ctimeutimeを更新するために使用すると (同時に設定する必要がある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)
4

4 に答える 4

15

メソッドを使用したRubyソリューションがありutimeます。ただし、変更時間 (mtime) とアクセス時間 (atime)を一度に設定する必要があります。アクセス時間を維持したい場合は、次を使用できます。

File.utime(File.atime(path), modification_time, path)

Ruby コア ドキュメントも参照してください。

于 2012-08-28T07:03:25.607 に答える
3

つまり、純粋なRubyソリューションが機能していることは間違いありませんが、これはOS Xであるため、使用することに反対ですか、exec()それともsystem()単に使用するだけtouchですか? あなたの場合、私はほとんど好むでしょう:

system "touch -t YYYYMMDDhhmm /what/ever"

明確さ以外の理由がない場合。

于 2011-12-24T19:54:03.650 に答える
2

これは、OS X 10.11.1 で作成時間を更新するのに役立ちます。

system "SetFile -d '#{time.strftime "%m/%d/%Y %H:%M:%S"}' #{file}"

移植性についての主張はありません - SetFile は OS X コマンドです (そして、man ページには、XCode 6 で非推奨になったと書かれているため、非常に長くは動作しない可能性があります) - それを行う別の方法を見つけることができませんでしたが、Time.utime作成時間を更新しませんでした。ただし、変更およびアクセスされた時間のみ。

参照: https://apple.stackexchange.com/q/99536/65787

于 2016-02-08T18:38:22.307 に答える