34

有人可以指定unix系统之间os.path.getmtime(path)和之间有什么区别吗?os.path.getctime(path)根据 python 文档中的定义:

os.path.getmtime(path)

返回上次修改路径的时间。返回值是一个数字,给出自纪元以来的秒数(参见时间模块)。如果文件不存在或不可访问,则引发 os.error。

os.path.getctime(path)

返回系统的 ctime,在某些系统(如 Unix)上是最后一次更改的时间,而在其他系统(如 Windows)上,是路径的创建时间。返回值是一个数字,给出自纪元以来的秒数(参见时间模块)。如果文件不存在或不可访问,则引发 os.error。

这是否基本上意味着它们在 unix/系统中使用时是相同的东西?

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

两张照片都给我带来了相同的价值。

我基本上是在寻找文件的最后创建日期,而不是最后修改日期。有没有办法在unix中实现相同的目标?

4

3 回答 3

27

mtime 是指上次更改文件内容的时间。这可以通过各种方式在 unix 系统上进行更改。通常,当您从备份恢复文件时,mtime 会更改以指示在进行备份之前最后一次更改内容的时间。

ctime 表示上次更改 inode 的时间。这是无法改变的。在上面的备份示例中,ctime 仍然会反映文件恢复的时间。此外,当文件权限等内容发生更改时,ctime 也会更新。

不幸的是,通常无法找到文件创建的原始日期。这是底层文件系统的限制。我相信 ext4 文件系统已将创建日期添加到 inode,Apple 的 HFS 也支持它,但我不确定您将如何在 Python 中检索它。(Cstat函数和相应的stat命令应该向您显示支持它的文件系统的信息。)

于 2013-07-30T23:11:28.570 回答
8

从 stat 的手册页中,它os.path.getmtime()os.path.getctime()两者都在 Unix 系统上使用:

该字段 st_mtime 由文件修改更改,例如,由、mknod(2)和(大于零字节)。此外,通过创建或删除该目录中的文件来更改目录。该字段不会因所有者、组、硬链接计数或模式的更改而更改。 ...truncate(2)utime(2)write(2)st_mtimest_mtime

st_ctime通过写入或设置 inode 信息(即所有者、组、链接计数、模式等)来更改字段。

所以不,这些不一样。

于 2013-07-30T23:10:40.380 回答
2

从技术上讲,这不是一个编程问题,因此不应该出现在 Stack Overflow 上,但您可以在这里找到您想要的答案——这恰好是ctime mtime atime. 简短的回答:ctime当文件的所有权或权限发生变化以及文件中的数据发生变化时发生变化。mtime仅当文件中的数据发生更改时才更改。

于 2013-07-30T23:08:34.917 回答