考虑下面两个计划同时运行的命令(通过 Autosys,恰好在早上 8 点)。
该find
命令删除了超过 15 天的文件但以非零状态退出:
???find missing /app/source/a.txt no such file or directory
但是,a.txt
已经是一天前了。为什么该find
命令会验证运行期间存在但同时移动到另一个文件夹的最近文件?
find /app/source -type f -name -mtime +15 rm -f {} \;
mv /app/source/a.txt /app/backup/
这就是所谓的竞争条件
find
。要知道这是一个不应删除的新文件,唯一的办法就是查看该文件。因此,find
首先找到该文件,然后检查其日期。就你的情况而言,似乎你的其他命令在
find
看到文件存在于目录中后就删除了该文件,但在它有时间检查其年龄之前。因此出现错误。目录基本上是文件名的列表。当您运行
find
并指定查看文件属性/特性(而不仅仅是文件名)的测试时,find
必须查询文件系统以获取每个目录中列出的每个文件的属性/特性。因此,除了调用之外,find
没有其他方法可以知道这a.txt
是最近的文件stat("a.txt")
。您可能已经理解,您的命令在读取目录和调用
mv
之间移动了文件。find
stat()