Ich versuche, eine Datei-Suche-Dienstprogramm in Ruby, die eine Liste von Dateinamen in einer TXT-Datei gefunden sucht und sucht meinen ganzen Computer für diese Dateien. Wenn eine dieser Dateien gefunden wird, wird die Datei in ein anderes Verzeichnis verschoben (effektiv aus dem Verzeichnis gelöscht, in dem sie gefunden wurde).Warum ist Dir.glob nur die letzte Datei in Schleife
Die Suche muss alle Ordner von oben nach unten durchlaufen. Bis jetzt habe ich den folgenden Code:
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
Die Probe-Datei-list.txt Datei hat diese Einträge:
0001.txt 0002.txt
im Ordner oben ich die Datei mit dem Namen „0001.txt“ habe. Ich habe auch einen Unterordner im Ordner namens "subdir", der die Datei "0002.txt" enthält.
Wenn ich die Ruby-Datei im Terminal laufen die Ergebnisse, die ich bekommen sind:
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
nur Mein Code setzt in der 0002.txt die letzte Datei findet. Aber es scheint die 0001.txt Datei aus irgendeinem Grund zu überspringen.
Als eine Randnotiz verwende ich eher nicht Dir.glob
, da es eine Menge Dateien sein wird, aber Dir.each
geht nicht durch Unterverzeichnisse mindestens ich kann nicht scheinen, um es zu bekommen - aber das ist ein anderes Problem.
Jede Hilfe wird geschätzt.
Einrückung ist wichtig für das Verständnis, besonders auf einen Blick. Versuchen Sie, Ihren Code so strukturiert wie möglich in Fragen zu halten, um Zweideutigkeiten oder Verwirrung zu vermeiden. – tadman
Wenn Sie Leistungsprobleme haben, ist es am besten, 'Dir.glob (" **/* ") einmal zu holen, dann benutzen Sie' grep', um Dateien in dieser Liste zu finden. – tadman
Ich werde in Zukunft vorsichtiger sein. Vielen Dank. – simplytrue