我在Redhat Linux服务器上的一个目录中有几十万个文件。
我需要执行ls -t
以获取上次编辑的文件的名称,并将文件名上传到数据库。最近,我开始遇到问题,因为目录中的文件数量不断增长,并且想知道'ls'
命令在ext4文件系统上执行时的时间复杂度。
另外,还有什么更好的方法呢?
当您在Linux操作系统上运行时,只需使用inotify tools。使用内核inotify
接口,可以使用一些非常简单的命令行工具来监视文件系统上的每个更改。
示例:
> inotifywait -m -e create -e modify test/ --format '%:e %f'
上面的命令无休止地等待(-m-> monitor)等待事件(-e)在目录test/
中创建和修改文件,并输出格式化字符串,其中%e
被事件替换为%f
替换为创建或修改的文件名。
如果您现在在单独的外壳中运行,请执行以下检查:
> touch test/newfile1
> touch test/newfile2
> echo hallo > test/newfile2
命令的输出是:
Setting up watches.
Watches established.
CREATE newfile2
MODIFY newfile2
非常容易地将文件名立即写入数据库,而无需再次读取整个目录。