确保在某个时间没有从目录中删除文件

确保在某个时间没有从目录中删除文件

我不小心启动了rm -rf我正在工作的一个大目录。该目录除其他外还包含一个data包含许多子目录的目录,每个子目录包含数千个文本文件。本质上它看起来像这样

$ tree data
data
├── collection0
│   ├── input
│   │   ├── file0.txt
│   │   ├── file1.txt
│   │   ├── ...
│   │   └── file9999.txt
│   └── output
│       ├── file0.txt
│       ├── file1.txt
│       ├── ...
│       └── file9999.txt
├── ...
└── collection99
    ├── input
    │   ├── file0.txt
    │   ├── file1.txt
    │   ├── ...
    │   └── file9999.txt
    └── output
        ├── file0.txt
        ├── file1.txt
        ├── ...
        └── file9999.txt

我能够rm -rf很快地中断该过程,但是当然,在半秒左右的执行时间内,其他子目录中的许多文件被删除了。

我的问题是,有没有办法 100% 确定给定的子目录在此期间是否丢失了任何文件?似乎Modify丢失文件的目录上的时间已更新为删除文件时的时间,并且使用此方法我思考数据子目录中没有文件被删除(假设2021-09-08是事件的日期rm -rf):

$ find data -mindepth 2 -maxdepth 2 -type d -exec stat {} -c '%n %y' \;
data/collection0/input 2021-08-28 05:45:49.624228368 -0400
data/collection0/output 2021-08-28 05:45:49.624228368 -0400
...
data/collection99/input 2021-08-29 04:55:38.772912003 -0400
data/collection99/output 2021-08-29 04:55:38.772912003 -0400
$ find data -mindepth 2 -maxdepth 2 -type d -exec stat {} -c '%n %y' \; | grep 2021-09-08
$

这是一个可靠的方法吗?

答案1

Linux 手册页stat(2)说:

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

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

rm所以,是的,如果触及每个目录,应该能够依赖更新的修改时间。当然,前提是事后没有手动重置,但在这种情况下,改变时间戳 (ctime) 应更新。好吧,如果我正确理解了手册页文本,则 ctime 也会在 mtime 更新时更新,因此仅查看该内容就足够了。

另外,只能用mtime来证明否定。如果时间戳被更新,则无法知道它是否是由于删除文件、创建另一个文件或手动修改时间戳而发生的。

相关内容