我试图通过测试了解 find 命令的输出-cnewer。在进行一些有限的测试时,这就是我得到的。
首先,我创建了一个文件:
cd ~/Documents
touch file1.txt
Run Code Online (Sandbox Code Playgroud)
然后我等了几分钟才创建另一个文件:
touch file2.txt
Run Code Online (Sandbox Code Playgroud)
然后我决定通过执行以下操作将内容时间戳与元数据时间戳进行比较:
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
Run Code Online (Sandbox Code Playgroud)
进而:
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
Run Code Online (Sandbox Code Playgroud)
到目前为止,没有什么意外,因为我没有做任何改变元数据时间戳的事情。
现在如果我输入:
chmod 664 file1.txt
Run Code Online (Sandbox Code Playgroud)
更改元数据时间戳,然后再次查看输出:
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
Run Code Online (Sandbox Code Playgroud)
file1.txt出现在ls -lhtc输出中的第一个位置,但仍位于ls -lht输出中的第二个位置,也如预期的那样。
最后,如果我决定输入:
cd ~/Documents
find . -cnewer file1.txt
Run Code Online (Sandbox Code Playgroud)
我得到:
.
./file2.txt
./file1.txt
Run Code Online (Sandbox Code Playgroud)
以下是我的问题:
-cnewer寻找什么?它是查看元数据时间戳是否已更改,还是查看内容时间戳是否已更改?它两者兼而有之吗?我很确定它两者兼而有之,但我想确定一下。
如果-cnewer两者都存在,为什么file1.txt最终会出现在输出中?我可以理解为什么file2.txt最终出现在输出中,因为 find 将查找比 更新的内容时间戳file1.txt,但我仍然不明白为什么file1.txt最终出现在输出中。毕竟,输出中没有ls -lhtc比file1.txt.
小智 5
来自手册(粗体我的):
\n\n\n\n\n\xe2\x80\x94 测试:
\n-anewer文件
\n \xe2\x80\x94 测试:-cnewer文件
\n \xe2\x80\x94 测试:-newer文件
\n 如果文件上次被访问(或其状态已更改,或者它是\ n 已修改)比文件 修改时间更晚。[...]
因此测试将atime、ctime和mtime分别与指定文件的mtime进行比较。
\n\n如果您想将 ctime 与 ctime 进行比较,请使用测试-newerXY:
find . -newercc file1.txt\nRun Code Online (Sandbox Code Playgroud)\n\n因此,-*newer测试是 的简写-newer*m。