unix系统中python-getmtime()和getctime()的区别

时间:2013-07-30 23:05:27

标签: python python-2.6

有人可以指定unix系统中os.path.getmtime(path)os.path.getctime(path)之间的区别。根据python docs中的定义:

os.path.getmtime(path)

  

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

os.path.getctime(path)

  

返回系统的ctime,在某些系统(如Unix)上   最后一次更改的时间,以及其他人(如Windows)的时间   创造时间的路径。返回值是给出数字的数字   自纪元以来的秒数(见时间模块)。提出os.error if   该文件不存在或无法访问。

这基本上意味着它们在unix / systems中使用时是一样的吗?

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

两个打印件都获取相同的值。

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

3 个答案:

答案 0 :(得分:17)

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

ctime表示最后一次改变inode。这不能改变。在上面的备份示例中,ctime仍将反映文件恢复的时间。此外,当文件权限等内容发生变化时,ctime会更新。

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

答案 1 :(得分:4)

来自stat的手册页,os.path.getmtime()os.path.getctime()都在Unix系统上使用:

  

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

     

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

所以不,这些不一样。

答案 2 :(得分:1)

这在技术上不是一个编程问题,因此不应该在Stack Overflow上,但你可以找到你想要的答案here - 这恰好是ctime mtime atime的第一个Google结果。简短回答:ctime在文件的所有权或权限发生变化时以及文件中的数据发生变化时发生变化。仅当文件中的数据发生更改时,mtime才会更改。