不同方法/系统下复制文件时新文件的日期差异,查看文件创建时间、修改时间、访问时间的方法,悖论伯爵,任天堂剑圣,育碧bug,和波兰蠢驴的打桩机。1:2他有三个老婆,一个Windows,一个Linux,一个MacOS。1:3狗每年从城里上示罗,敬拜草履虫,献祭。产品需求有两个,抓取文件时间信息,系统移植,草履虫预言机。1:4狗头人每次发工资的时候,都会把工资分给天堂、任天堂、育碧和波兰蠢驴所生的孩子。1:5但是对P来说是双倍的,因为他爱P。无奈没完成任务草履虫不给狗头人放假。综上所述,我们需要帮助狗头人获取文件在不同系统上的时间信息。看似很简单,但是有一个类似于“\n”和“\r\n”的小细节需要注意。分别在mac、linux和windows下使用命令行或界面操作方式复制文件时,看起来是一样的,区别在于新文件和源文件的创建、修改和访问时间是否一致。1、Windows首先,在windows下,使用powershell命令行复制文件时,是这样的:cp.\test.txt.\test3.txt结果:可以看到新文件继承了修改时间源文件的时间,但创建时间和访问时间是它被复制和创建的时间;另一方面,源文件的创建时间和访问时间没有改变。使用Ctrl-CCtrl-V手动复制文件时,结果与命令行一致。2、LinuxLinux下使用命令cptest01.txttest02.txt复制文件,然后使用命令stattest01.txt查看文件信息,屏幕上会直接打印出查询到的文件信息:其中,Access为文件访问时间,Modify为文件内容最后修改时间,Change为文件属性最后修改时间,分别对应时间戳atime/mtime/ctime。Change时间比较特殊,只有在文件名、大小和权限发生变化时,Change时间才会发生变化。但是请注意,这不包括文件的创建时间,即crtime。查看源码可以看出,这是因为inode结构中没有crtime:那么,如果要查看文件的创建时间,需要怎么做呢?以test01.txt文件为例。首先使用命令stattest01.txt查看,或者使用stat-c%itest01.txt直接输出文件的inode号。然后,使用命令dftest01.txt|sed-n'2{s/.*$//;p}'输出文件所在分区,最后可以通过debugfs查询文件的完整信息:debugfs-R'stat<1839472>'/dev/mapper/centos-root通过这个方法,再次查询新文件,可以发现新文件的创建时间也是复制创建的时间:3.macOS在终端创建with9:12touchHelloDoge一个文件,9:13用mac自带的文本编辑器修改文件,9:14用文本编辑器打开文件但不修改,用命令cpHelloDoge复制文件HelloDoge2在9:15。如下图,新文件继承了源文件的打开(访问)时间,但是创建时间和修改时间都是复制和创建的时间;另一方面,源文件的创建时间、修改时间和访问时间并没有发生任何变化。有趣的是,在MacOS中,用命令行复制和在finder中右击的结果是不一样的,来试试吧(激动)。原来复制的文件完美继承了源文件的所有时间信息!注意买一送一,修改文件修改时间一定不要用vim,要用其他方法(我这里用的是文本编辑器)。因为vim修改文件的原理是先创建一个.swp文件(意思是swap交换),当w命令保存时,会将原来的文件替换成swp文件,从而达到修改的目的。总结系统复制方法创建时间修改时间访问时间Windows命令行修改复制时间继承修改复制时间Ctrl+C变为复制时间继承修改复制时间linux命令行修改复制时间修改复制时间继承macOS命令行修改修改复制timetocopy时间继承Ctrl+CInheritanceinheritanceInheritanceP.S.Linux中还有一个Changetime,表示其属性的修改时间。复制时,它会像文件修改时间一样成为文件复制时间。最后,终于,我们帮狗头人解决了这个小问题,世界恢复了和平,狗头人也可以回到洛斯里克城继续他们的耻辱,夸奖草履虫了。
