给定一个包含大约 100 000 个小文件的目录(每个文件大约 1kB)。我需要获取这些文件的列表并对其进行迭代,以便找到名称相同但大小写不同的文件(这些文件位于 Linux ext4 FS 上)。目前,我使用这样的一些代码:
def similar_files_in_folder(file_path, folder, exclude_folders = false)
files = Dir.glob(file_path, File::FNM_CASEFOLD)
files_set = files.select{|f| f.start_with?(folder)}
return files_set unless exclude_folders
files_set.reject{|entry| File.directory? entry}
end
dir_entries = Dir.entries(@directory) - ['.', '..']
dir_entries.map do |file_name|
similar_files_in_folder(file_name, @directory)
end
这种方法的问题是片段需要很多!时间来完成。我的系统大约需要几个小时。
是否有另一种方法可以在 Ruby 中实现相同的目标但速度更快?
限制:我无法将文件列表加载到内存中,然后只比较大小写的名称,因为在@directory 中会出现新文件。所以,我需要在每次迭代时扫描@directory。
感谢您的任何提示。