我只知道ls -tls -f在目录下给出了不同的文件和子目录排序。


文件的时间戳,修改时间和创建时间之间有什么区别?
如何通过命令获取和更改这类信息?
人们说哪种文件比其他文件“更新”?
哪种类型的信息不会改变
文件是否不同?例如,我看到有人写道:


默认情况下,rsync程序仅查看文件是否不同大小和时间戳。不在乎哪个文件较新,如果文件不同,它将被覆盖。您可以将'--update'标志传递给rsync,如果它们比源文件中的文件新,它将导致目标文件上的文件跳过,但前提是它们是相同类型的文件。这意味着,例如,如果源文件是常规文件而目标是符号链接,则无论时间戳如何,目标文件都会被覆盖。


请注意,这里的文件类型仅表示常规文件和simlink,而不是pdf,jpg,htm,txt等类型的文件吗?

评论

另请参见askubuntu.com/questions/62492/…

#1 楼

共有3种“时间戳”:


访问-上次读取文件的时间
修改-上次修改文件的时间(内容已被修改)< br更改-文件的最后一次元数据更改(例如权限)

要显示此信息,可以使用coreutils中的stat

stat还将向您显示更多信息,例如设备,inode,链接等。

请记住,此类信息在很大程度上取决于文件系统和安装选项。例如,如果使用noatime选项安装分区,则不会写入任何访问信息。

用于更改时间戳的实用程序将为touch
有一些参数可以确定要使用哪个时间戳。更改(例如-a表示访问时间,-m表示修改时间)并影响对新给定时间戳的解析。
有关详细信息,请参阅man touch

touch可以很方便地组合使用使用cp -u(“仅在SOURCE文件比目标文件新时或目标文件丢失时复制”)或用于创建空标记文件。

评论


谢谢!对于rsync命令,在“它不在乎哪个文件是较新的”中,用哪种类型的时间戳表示“较新”。另外,顺便说一句,rsync关心的文件类型是否仅意味着常规文件和simlink,而不是pdf,jpg,htm,txt等类型?

– Tim
2010-09-27 15:44

通常,对文件时间的引用是“修改的”时间戳。例如,您从ls -l中看到的内容。文件类型是指文件与符号链接(或其他类型的文件,如目录或设备)。不是文件中的数据类型是什么(文本与jpeg等)。

–Seth L
2010-09-27 18:12



@Tim在这种情况下是修改后的时间戳; rsync表示,在决定是否应备份文件时,它不会检查源文件是否比现有备份(在备份程序中很常见)修改的时间最近;它只是检查文件是否具有不同的大小或不同的修改时间,如果有则进行备份

– Michael Mrozek
2010-09-27 18:58



我怎么知道什么时候第一次创建文件?此信息是完全保留在某个地方还是在更新中丢失了?可以这么说,该文件存在多长时间了?

–xyz
2011年11月16日10:07



stat(2)手册页详细描述了这些时间戳记的更改时间。

–克里斯蒂安·丘皮图
14年7月31日在16:11

#2 楼

echox的答案是有效的,但我想添加有关文件创建时间的信息。

文件系统支持

某些文件系统支持inode中有关创建时间的其他条目(或出生时间)。我知道ext4支持此功能,还支持JFS和BTRFS。

但是大多数工具和API尚未更新以读取此额外信息。因此,即使它可以存在,也无法访问。

例如在Ubuntu 12.04 LTS上,我得到了今天创建的文件的以下内容:

$ echo Just another test > /tmp/mytest
$ sleep 3
$ touch /tmp/mytest
$ sleep 2
$ cat /tmp/mytest > /dev/null
$ stat /tmp/mytest 
[...]
Access: 2012-06-05 13:33:44.279774711 +0200
Modify: 2012-06-05 13:33:34.611893317 +0200
Change: 2012-06-05 13:33:34.611893317 +0200
 Birth: -
$ sudo debugfs -R 'stat /tmp/mytest' /dev/sda1
[...]
 ctime: 0x4fcdee8e:91e30114 -- Tue Jun  5 13:33:34 2012
 atime: 0x4fcdee98:42b417dc -- Tue Jun  5 13:33:44 2012
 mtime: 0x4fcdee8e:91e30114 -- Tue Jun  5 13:33:34 2012
crtime: 0x4fcdee46:01258f1c -- Tue Jun  5 13:32:22 2012
[...]


您可以看到,较新的stat函数具有一个birth字段,尽管输出似乎不正确。通过debugfs,我们可以获得信息(就像我在ext4文件系统上的时间)。

statx支持

从内核4.11开始,有一个新的statx系统调用,除了更好地支持Y2038或网络文件系统外,它还带来了一些额外的功能,例如btime或生日(创建时间)访问权限。对ext4的支持应在同一内核版本4.11中。

在以后的Kernel版本中,有一些补丁程序可以为该新的syscall添加支持。内核4.13中的BTRFS和F2FS,4.14中的SMB3、4.15中的GFS2、4.16中的NFS等。

即将到来的glibc将提供函数调用以查询此接口(请参阅有关Glibc statx支持的Phoronix新闻。 )。因此,我们很快就会在用户空间中支持此功能。

评论


您是否知道将Windows中的文件(创建时间)移至ext4时,btime是否保持不变(反之亦然),例如mtime?

–天堂
19年1月20日在4:07



@paradroid很抱歉,我不知道答案。如果在Linux下将文件从NTFS复制到ext4的意思是,如果它支持创建时间,则需要查看NTFS驱动程序。如果要在Windows下使用,则需要查看Windows的ext4驱动程序。

–惠更斯
19年1月20日在14:19