find 的 mtime 和 ctime 选项

Flo*_*oHe 5 find timestamps

我刚刚在我的主目录中创建了一个文本文件 yyy。我修改它touch yyy并手动编辑它。

然后我想通过以下方式找到这个文件(和其他文件):

find ~/ -type f -mtime 1 -ctime 1 | grep yyy
Run Code Online (Sandbox Code Playgroud)

但 yyy 不显示。在 find 的 man 中是这样写的:

-ctime n:文件的状态在 n*24 小时前最后一次更改。...

-mtime n:文件数据最后修改时间为 n*24 小时前。...

所以我的第一个问题是:

为什么找不到yyy

我的第二个问题是:

已更改文件的状态是否意味着:已更改文件内容和文件权限 & ...?

修改文件的数据是否意味着:更改文件内容?

xhi*_*nne 6

是的,“修改文件的数据” ( mtime) 表示内容已被修改。该日期可以手动更改(例如使用touch)。

是的,“已更改文件的状态” ( ctime) 表示内容已更改,或文件的元数据(权限、所有者等)已更改。这不能手动更改。

例子:

$ date > foo
$ ls -l --full-time foo; ls -lc --full-time foo     # Both times have changed
-rw-r--r-- 1 xhienne xhienne 29 2017-01-18 13:40:07.677161702 +0100 foo
-rw-r--r-- 1 xhienne xhienne 29 2017-01-18 13:40:07.677161702 +0100 foo

$ chmod o-r foo
$ ls -l --full-time foo; ls -lc --full-time foo     # Only ctime has changed
-rw-r----- 1 xhienne xhienne 29 2017-01-18 13:40:07.677161702 +0100 foo
-rw-r----- 1 xhienne xhienne 29 2017-01-18 13:40:29.601161310 +0100 foo

$ date >> foo
$ ls -l --full-time foo; ls -lc --full-time foo     # Again, both times have changed
-rw-r----- 1 xhienne xhienne 58 2017-01-18 13:40:51.297160921 +0100 foo
-rw-r----- 1 xhienne xhienne 58 2017-01-18 13:40:51.297160921 +0100 foo
Run Code Online (Sandbox Code Playgroud)

找不到您的文件,因为您的find谓词-mtime 1-ctime 1搜索昨天修改的文件(更准确地说是在 24 小时前到 48 小时前)。对于今天修改的文件,使用-mtime 0-mtime -1(与 相同-ctime)。

例子:

$ find -name foo -mtime 1 -ctime 1

$ find -name foo -mtime 0 -ctime 0
./foo

$ find -name foo -mtime -1 -ctime -1
./foo
Run Code Online (Sandbox Code Playgroud)