使用带有 -cnewer 测试的 find 命令

使用带有 -cnewer 测试的 find 命令

我正在尝试通过测试来了解 find 命令的输出-cnewer。在进行一些有限的测试后,我得到了以下结果。

首先,我创建了一个文件:

cd ~/Documents
touch file1.txt

然后我等了几分钟才创建另一个文件:

touch file2.txt

然后我决定通过执行以下操作将内容时间戳与元数据时间戳进行比较:

ls -lht (for content timestamp)
-rw-rw-r-- 1 mason mason    0 Aug 11 01:19 file2.txt
-rw-rw-r-- 1 mason mason    0 Aug 11 01:17 file1.txt

进而:

ls -lhtc (for metadata timestamp)
-rw-rw-r-- 1 mason mason    0 Aug 11 01:19 file2.txt
-rw-rw-r-- 1 mason mason    0 Aug 11 01:17 file1.txt

到目前为止没有什么意外,因为我没有做任何事情来改变元数据时间戳。

现在如果我输入:

chmod 664 file1.txt

更改元数据时间戳,然后再次查看输出:

ls -lhtc
-rw-rw-r-- 1 mason mason    0 Aug 11 01:23 file1.txt
-rw-rw-r-- 1 mason mason    0 Aug 11 01:19 file2.txt

file1.txt出现在ls -lhtc输出的第一位,但仍然出现在ls -lht输出的第二位,这也符合预期。

最后,如果我决定输入:

cd ~/Documents
find . -cnewer file1.txt

我得到:

.
./file2.txt
./file1.txt

以下是我的问题:

  1. 它会查找什么-cnewer?它会查找元数据时间戳是否已更改,还是查找内容时间戳是否已更改? 是否同时执行了这两个操作? 我很确定它同时执行了这两个操作,但我想确定一下。

  2. 如果-cnewer两者都执行,为什么file1.txt最终会出现在输出中?我可以理解为什么file2.txt最终会出现在输出中,因为 find 会寻找比 更近的内容时间戳file1.txt,但我仍然不明白为什么最终会出现在输出中。毕竟,输出file1.txt中没有比 更近的元数据时间戳的文件。ls -lhtcfile1.txt

答案1

来自手册(粗体部分为我的):

- 测试:-anewer 文件
- 测试:-cnewer 文件
- 测试:-newer 文件
如果文件最后一次被访问(或者它的状态改变,或者它被修改)的时间晚于文件 已修改。 [...]

因此测试分别将 atime、ctime 和 mtime 与时光网指定文件。

如果您想将 ctime 与 ctime 进行比较,那么使用以下-newerXY测试:

find . -newercc file1.txt

因此,-*newer测试是的简写-newer*m

相关内容