散列迭代不返回子目录内容

我有一个方法,查找给定父目录的子目录。 我将父目录存储在哈希中,然后将哈希作为参数传递。 我正在尝试将子目录的内容收集到一个数组中,然后将其输出到报表中。

我遇到的问题是,数组的内容只是将目录存储在哈希的最后一个值中,我很快意识到内容被循环的每次迭代都被覆盖,所以我创建了一个新的数组来存储内容到每次迭代后。

在我的更改之前,我看到子目录正常输出。 这是我的代码示例:

# stores subdirectory contents into an array def store_directories(directories, folder_to_exclude) # changes working directory to the directory variable subdir_list = nil directories.each_value do |value| directory = "#{value}" puts Time.now.to_s + " > " + "Updating search directory..." Dir.chdir(directory) # outputs only subdirectories with a creation date of older than 24 hours, except for folders names 'test' Dir.glob("*.*").map(&File.method(:realpath)) puts Time.now.to_s + " > " + "Gathering subdirectories..." subdir_list = Dir.glob("*").map(&File.method(:realpath)).reject{|files| (not File.directory?(files) && (File.mtime(files) < (Time.now - (60*1440))) && (not files == directory + folder_to_exclude)) } puts subdir_list end return subdir_list end 

输出看起来像这样:

 /path/to/parent/subdirectory1 /path/to/parent/subdirectory2 /path/to/parent/subdirectory3 /path/to/parent/subdirectory4 ... 

这几乎是我想要的方式,除了我只获取最后一个目录的内容..

这是我进行更改后的代码示例,以便不会覆盖数组的内容:

 # stores subdirectory contents into an array def store_directories(directories, folder_to_exclude) # changes working directory to the directory variable subdir_list = directories.each_value do |value| directory = "#{value}" puts Time.now.to_s + " > " + "Updating search directory..." Dir.chdir(directory) # outputs only subdirectories with a creation date of older than 24 hours, except for folders names 'test' Dir.glob("*.*").map(&File.method(:realpath)) puts Time.now.to_s + " > " + "Gathering subdirectories..." subdirectories = Dir.glob("*").map(&File.method(:realpath)).reject{|files| (not File.directory?(files) && (File.mtime(files) < (Time.now - (60*1440))) && (not files == directory + folder_to_exclude)) } puts subdirectories end return subdir_list end 

但这是问题,现在我的输出看起来像这样……

 directory1 /path/to/parent1/ directory2 /path/to/parent2/ directory3 /path/to/parent3/ 

突然,我的代码不再寻找子目录的内容,而只是返回父目录……

试试这个:

 # stores subdirectory contents into an array def store_directories(directories, folder_to_exclude) # changes working directory to the directory variable subdir_list = nil directories.each_value do |value| directory = "#{value}" puts Time.now.to_s + " > " + "Updating search directory..." Dir.chdir(directory) # outputs only subdirectories with a creation date of older than 24 hours, except for folders names 'test' Dir.glob("*.*").map(&File.method(:realpath)) puts Time.now.to_s + " > " + "Gathering subdirectories..." subdir_list << Dir.glob("*").map(&File.method(:realpath)).reject{|files| (not File.directory?(files) && (File.mtime(files) < (Time.now - (60*1440))) && (not files == directory + folder_to_exclude)) } puts subdir_list end return subdir_list end 

这将基本保留旧代码,并在每次迭代时将新项追加到subdir_list,而不是覆盖。 请注意,这里唯一真正的变化是subdir_list =被更改为subdir_list <<