在 ext4 文件系统上 运行 时 'ls' 命令的时间复杂度是多少?

What is the time complexity of 'ls' command when run on ext4 filesystem?

我在 Redhat Linux 服务器的一个目录中有几十万个文件。

我需要执行 ls -t 来获取上次编辑文件的名称并将文件名上传到数据库。最近我开始遇到问题,因为目录中的文件数量不断增加,我想知道 'ls' 命令在 ext4 文件系统上执行时的时间复杂度。

另外,有什么更好的方法吗?

由于您正在 运行linuxos,您可以简单地使用 inotify tools。有一些非常简单易用的命令行工具可以使用内核 inotify 界面监视文件系统上的每个更改。

示例:

> inotifywait -m -e create -e modify test/ --format '%:e %f'

上面的命令无限等待(-m -> monitor)事件(-e)在 test/ 中创建和修改文件,这是一个目录,并输出格式化字符串,其中 %e 替换为事件,%f 替换为创建或修改的文件名。

如果您现在 运行 在单独的 shell 中进行一些检查,例如:

> touch test/newfile1
> touch test/newfile2
> echo hallo > test/newfile2

命令的输出是:

Setting up watches.
Watches established. 
CREATE newfile2
MODIFY newfile2

现在只需将文件名写入数据库,而无需再次读取整个目录,这非常容易。