【发布时间】:2017-02-15 22:33:38
【问题描述】:
我正在尝试用 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 文件时,我得到的结果是:
这是我要查找的文件:0001.txt 这是我要查找的文件:0002.txt 现在我正在处理 /Users/bob/code/find-file/subdir/0002.txt我的代码只发现将最后一个文件放在 0002.txt 中。但它似乎出于某种原因跳过了 0001.txt 文件。
作为旁注,我宁愿不使用 Dir.glob,因为它会包含很多文件,但 Dir.each 至少不会通过子目录,我似乎无法找到它 - 但这是另一个问题。
任何帮助将不胜感激。
【问题讨论】:
-
缩进对于理解很重要,尤其是一目了然。尽量让问题中的代码井井有条,以避免歧义或混淆。
-
如果您遇到性能问题,最好使用
Dir.glob("**/*")一次获取所有内容,然后使用grep在该列表中查找文件。 -
以后我会更加小心。谢谢。
标签: ruby