准确查找前一天00:00-24:00增加的文件

版权声明: https://blog.csdn.net/zhuangzi123456/article/details/81451887

问题:

发现增量文件

难点:

1,上传的文件都是图片,目录结构和文件名称都没有与日期相关的规律;

2,操作系统无法使用inotify;

3,上传图片的mtime属性不是上传操作时间点的时间,比如3月10日上午10点上传的图片,其mtime属性值可能是2012年7月份,也可能是2018年3月3日、3日、5日等;所以,无法使用find的-mtime选项来锁定前一天00点到今天00点内变动的文件;

最终解决办法:

经过了个把月的有一搭没一搭的思考,终于今天把问题解决了,那就是使用find的-ctime来查找文件,不要使用mtime。

参考文章:

1,ctime和mtime的区别

mtime: (modify time)显示的是文件内容被修改的最后时间,比如用vi编辑时就会被改变。(也就是Block的内容)

ctime: (change time)显示的是文件的权限、拥有者、所属的组、链接数发生改变时的时间。当然当内容改变时也会随之改变(即inode内容发生改变和Block内容发生改变时)

我的理解:上传一个新文件的时候,不论其mtime是什么,系统都会给它分配一个新的inode用来记录其元数据,这个时候的ctime必然会修改为创建文件时的时间;如果已经存在的文件被修改了,那么文件的字节数必然会变,这也导致其inode信息必然也会改变,从而ctime也会改变到修改文件的时间点。到此,ctime完全可以满足上传新文件和修改已经存在的文件所触发的时间点。

2,inode记录信息

inode包含文件的元信息,具体来说有以下内容:

  * 文件的字节数

  * 文件拥有者的User ID

  * 文件的Group ID

  * 文件的读、写、执行权限

  * 文件的时间戳,共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间。

  * 链接数,即有多少文件名指向这个inode

  * 文件数据block的位置

可以用stat命令,查看某个文件的inode信息:

stat example.txt

总之,除了文件名以外的所有文件信息,都存在inode之中。

猜你喜欢

转载自blog.csdn.net/zhuangzi123456/article/details/81451887
00