我正在尝试在ruby中编写一个文件搜索实用程序,它获取在txt文件中找到的文件名列表,并在整个计算机中搜索这些文件。如果找到其中一个文件,则该文件将被移动到另一个目录(实际上将其从找到的目录中删除)。
搜索必须自上而下遍历所有文件夹。到目前为止,我有以下代码:
File.open("sample-file-list.txt") do |name| # open file with
name.each_line do |file_name|
puts "here is the file I want to look for: #{file_name}"
folder = "/Users/bob/code/find-file"
Dir.glob("#{folder}/**/#{file_name}") do |file|
puts "now I am working on #{file}"
end
end
end
sample-file-list.txt文件包含以下条目:
0001.txt 0002.txt
在上面的文件夹中,我有一个名为“0001.txt”的文件。我在名为subdir的文件夹中也有一个子文件夹,其中包含名为“0002.txt”的文件。
当我在终端中运行ruby文件时,得到的结果是:
here is the file I want to look for: 0001.txt here is the file I want to look for: 0002.txt now I am working on /Users/bob/code/find-file/subdir/0002.txt
我的代码只查找将最后一个文件放在0002.txt中。但由于某种原因,它似乎跳过了0001.txt文件。
作为旁注,我宁愿不使用Dir.glob
,因为它会有很多文件,但Dir.each
不会通过子目录,至少我似乎无法得到它 - 但这是另一个问题
任何帮助将不胜感激。
答案 0 :(得分:1)
除了您要查找的文件名之外,您阅读的文件的每一行还包含一个换行符,假设为\n
。这包含在您从each_line
获得的字符串中。
所以答案是:
1)使用file_name.strip
作为搜索词,因此任何实际上不属于所需文件名的额外空格都会被删除。否则Dir.glob
将失败,因为它将在最后搜索带换行符的文件/模式。
2)找到了测试用例中的最后一个文件,因为您在文件末尾没有换行符。如果你添加一个(即文件的最后一行是空的),脚本甚至找不到列表中的最后一个实际文件。