web-dev-qa-db-ja.com

python-UNIXシステムでのgetmtime()とgetctime()の違い)

誰かがUNIXシステムでのos.path.getmtime(path)os.path.getctime(path)の違いを教えてください。 python docsの定義に従って:

os.path.getmtime(path)

パスの最終変更時刻を返します。戻り値は、エポックからの秒数を示す数値です(timeモジュールを参照)。ファイルが存在しないかアクセスできない場合はos.errorを発生させます。

os.path.getctime(path)

システムのctimeを返します。これは、一部のシステム(Unixなど)では最後の変更時刻であり、他のシステム(Windowsなど)では、パスの作成時刻です。戻り値は、エポックからの秒数を示す数値です(timeモジュールを参照)。ファイルが存在しないかアクセスできない場合はos.errorを発生させます。

それは基本的にそれらがunix/systemsで使われたときに同じものであることを意味しますか?

#!/usr/bin/python
import os
print os.path.getmtime('File')
print os.path.getctime('FIle')

どちらのプリントにも同じ値が表示されます。

基本的に、最終更新日ではなく、ファイルの最終作成日を探しています。 UNIXで同じことを達成する方法はありますか?

23
misguided

Mtimeは、ファイルの内容が最後に変更された時刻を示します。これは、UNIXシステムではさまざまな方法で変更できます。多くの場合、バックアップからファイルを復元すると、mtimeは、バックアップが作成される前に内容が最後に変更された時刻を示すように変更されます。

Ctimeは、iノードが最後に変更された時刻を示します。これは変更できません。上記のバックアップの例では、ctimeはファイルの復元時間を反映しています。さらに、ファイルのアクセス許可などが変更されると、ctimeが更新されます。

残念ながら、通常、ファイル作成の元の日付を見つける方法はありません。これは、基礎となるファイルシステムの制限です。 ext4ファイルシステムがiノードに作成日を追加したと思います。AppleのHFSもそれをサポートしていますが、Pythonでどのように取得するかはわかりません。 (C stat関数と対応するstatコマンドは、それをサポートするファイルシステムに関する情報を表示するはずです。)

22
eaj

os.path.getmtime()os.path.getctime()の両方がUnixシステムで使用されているstatのmanページから:

フィールドst_mtimeは、mknod(2)truncate(2)utime(2)およびwrite(2)などのファイル変更によって変更されます(0バイトを超える) )。また、ディレクトリのst_mtimeは、そのディレクトリ内のファイルの作成または削除によって変更されます。 st_mtimeフィールドは、所有者、グループ、ハードリンクカウント、またはモードの変更に対しては変更されません。
...

フィールドst_ctimeは、書き込みまたはiノード情報(つまり、所有者、グループ、リンク数、モードなど)を設定することによって変更されます。

したがって、これらは同じではありません。

7
Andrew Clark

これは技術的にはプログラミングの問題ではないため、Stack Overflowに出すべきではありませんが、求める答えを見つけることができます here —これはctime mtime atimeの最初のGoogle結果です。短い答え:ctimeは、ファイルの所有権または権限が変更されたとき、およびファイル内のデータが変更されたときに変更されます。 mtimeは、ファイル内のデータが変更されたときにのみ変更されます。

2
kindall