在 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
现在只需将文件名写入数据库,而无需再次读取整个目录,这非常容易。
我在 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
现在只需将文件名写入数据库,而无需再次读取整个目录,这非常容易。