获取大文件列表,以*毫秒为单位按文件时间sorting*

我知道我的文件系统正在以毫秒为单位存储文件修改时间,但我不知道通过PHP访问这些信息的方法。 当我做一个ls --full-time我看到这个:

 -rw-r--r-- 1 nobody nobody 900 2012-06-29 14:08:37.047666435 -0700 file1 -rw-r--r-- 1 nobody nobody 900 2012-06-29 14:08:37.163667038 -0700 file2 

我假设点之后的数字是毫秒。

所以我意识到我可以使用ls并按修改时间sorting,如下所示:

 $filelist = `ls -t`; 

但是,目录有时有大量的文件,我注意到在这种情况下, ls可能会很慢。

所以相反,我一直在使用find但它没有按修改时间sorting结果的开关。 下面是我现在正在做的一个例子:

 $filelist = `find $dir -type f -printf "%T@ %p\n" | sort -n | awk '{print $2}'`; 

而且,当然,这不会降到毫秒级,因此在同一秒创build的文件有时会按错误顺序列出。

只有少数文件系统(如EXT4)实际上将这些时间存储在纳秒级的精度内。 这不是保证在其他文件系统(如EXT3)上可用的东西,你会注意到小数部分是.000000000

现在,如果这个功能对你来说真的很重要,你可以编写一个专门的PHP扩展。 这将绕过对外部公用事业的呼叫,应该快得多。 创建扩展的过程在很多地方都有很好的解释,就像这里一样。 这种扩展的合理方法可能是一个替代的fstat函数实现,它暴露了当今在/usr/include/bits/stat.h中定义的stat结构中可用的高精度字段。

像往常一样,没有东西是免费的 这个扩展将不得不被维护,它可能无法运行在托管环境等。另外,你的PHP解决方案将只运行在你的扩展部署服务器(虽然这可以通过回落基于LS的技术如果扩展未被检测到)。