我正試圖在ruby中編寫一個文件搜索實用程序,它需要在txt文件中找到的文件名列表並搜索我的整個計算機中的這些文件。如果找到其中一個文件,那麼該文件將被移動到不同的目錄(有效地將其從找到的目錄中刪除)。爲什麼Dir.glob只評估循環中的最後一個文件
搜索必須通過所有文件夾自上而下。因此,到目前爲止,我有以下代碼:
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
的樣本文件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
不會經過子目錄,至少我似乎無法得到它 - 但這是另一個問題。
任何幫助將不勝感激。
縮進對理解很重要,特別是一目瞭然。儘量組織儘可能有組織的代碼,以避免模糊或混淆。 – tadman
如果您遇到性能問題,最好''Dir.glob(「**/*」)'一次獲取所有內容,然後使用'grep'查找該列表中的文件。 – tadman
我將來會更加小心。謝謝。 – simplytrue