找到最近写的文件(unix):找到出现"不够好#34;

时间:2011-12-21 20:39:59

标签: unix find

我运行了以下命令:

find . -type f | xargs ls -ltrhg

为了在程序运行时获取最近编写的文件。

结果很奇怪:在列表的底部,我收到了最近的文件,但是最近创建的MOST非常缺少...那就是测试,我直接运行

touch asdf

接着是

find . -type f | xargs ls -ltrhg

然而asdf并不是最新的。

关于为什么这个命令似乎忽略了最近编写的文件,但是按照编辑它们的正确顺序返回了几百个文件的任何想法?

2 个答案:

答案 0 :(得分:4)

程序在写入文件时最终调用write()。写入不会立即将任何内容放入磁盘。

除非您编程调用fdatasync()或其表兄,如fflush(),否则数据将保留在内核缓冲区中,直到内核决定将数据放入磁盘。您可以将一堆数据写入文件,而不会将其物理写入磁盘。这是一个性能功能。与内存访问相比,磁盘I / O非常慢。

这意味着,在实践中,您的程序可以找到比当前正在编写的文件更新的其他磁盘文件。

答案 1 :(得分:1)

问题可能是有很多文件,xargs将它们分成几个ls的调用。

(我怀疑缓冲区缓存是个问题。除非这是Unix的一些奇特的分布式版本,find,xargs和ls都应该读取和写入相同的缓冲区缓存。)