我正在尝试通过测试来了解 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
以下是我的问题:
它会查找什么
-cnewer
?它会查找元数据时间戳是否已更改,还是查找内容时间戳是否已更改? 是否同时执行了这两个操作? 我很确定它同时执行了这两个操作,但我想确定一下。如果
-cnewer
两者都执行,为什么file1.txt
最终会出现在输出中?我可以理解为什么file2.txt
最终会出现在输出中,因为 find 会寻找比 更近的内容时间戳file1.txt
,但我仍然不明白为什么最终会出现在输出中。毕竟,输出file1.txt
中没有比 更近的元数据时间戳的文件。ls -lhtc
file1.txt
答案1
来自手册(粗体部分为我的):
- 测试:
-anewer
文件
- 测试:-cnewer
文件
- 测试:-newer
文件
如果文件最后一次被访问(或者它的状态改变,或者它被修改)的时间晚于文件 已修改。 [...]
因此测试分别将 atime、ctime 和 mtime 与时光网指定文件。
如果您想将 ctime 与 ctime 进行比较,那么使用以下-newerXY
测试:
find . -newercc file1.txt
因此,-*newer
测试是的简写-newer*m
。