我正在开发一个Ruby应用程序,其中涉及大量的文本文件(数量以百万计)。这些文件中的每一个都被称为两个字符的字符串,它可以包括常规的字母数字字符和特殊字符。以下是几个例子:
文件名ab.txt(无特殊字符)
文件名**-B**(第一个字符是特殊字符)
文件名**%!.txt**(两个字符均为特殊字符)
我面临的任务是根据输入文本有效地选择这些文件的子集。当用户输入两个字符的字符串时,应用程序必须选择所有目录中名称与该字符串对应的所有文件。
我尝试使用正则表达式模式和glob来直接搜索感兴趣的文件。例如,如果用户输入ab作为字符串,我使用类似Dir.glob("data/*/ab.txt")
的Dir.glob
函数直接搜索ab.txt文件。但是,如果输入字符串包含特殊字符,则此方法不起作用。例如,如果输入字符串为**-B**,则Dir.glob("data/*/-b.txt")
无法成功找到**-b.txt**文件。
所以我的问题是如何根据两个字符的字符串有效地选择文件,即使该字符串包含特殊字符?请注意,由于文件的数量很大,涉及将所有文件名读入内存的方法效率很低。我正在寻找一种方法,可以立即选择我感兴趣的文件,类似于当文件名不包括特殊字符时globbing的工作方式。
1条答案
按热度按时间s5a0g9ez1#
这就是Find擅长的:
运行该命令后,
files
将包含some/dir
(或其子目录)中以-b.txt
结尾的所有文件的文件路径。我会避免使用regexs、基于shell的工具或globs,因为它们会特别使特殊字符难以使用。
Find
的好处是它以普通字符串的形式提供完整的文件路径,您可以将其与普通字符串进行比较,因此根本不涉及特殊的字符处理。