我有一个查找给定父目录的子目录的方法。我将父目录存储在哈希中,然后将哈希作为参数传递。我试图将子目录的内容收集到一个数组中,然后将其输出到报告中。
我遇到的问题是数组的内容只是将目录存储在哈希的最后一个值中,我很快意识到内容被循环的每次迭代都被覆盖,所以我创建了一个新的数组来存储每次迭代后的内容。
在我更改之前,我看到子目录正常输出。这是我的代码示例:
# 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/
突然间,我的代码不再查找子目录的内容,只是返回父目录......
答案 0 :(得分:0)
试试这个:
# 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 <<