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

时间:2017-10-27 04:03:33

标签: ruby

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

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

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

# 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/

突然间,我的代码不再查找子目录的内容,只是返回父目录......

1 个答案:

答案 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 <<