运行多个命令行参数

时间:2017-11-12 14:27:56

标签: ruby

这是一项学校作业,我现在已经研究了一段时间,它只适用于给出的1个参数。我尝试了很多使用ARGV的不同场景,并认为我只是遗漏了一些东西。

该程序应该运行在命令行中给出的多个目录。如果没有给出参数,它应默认为当前工作目录。

我将提供适用于一个参数的代码。同样,我只需要能够获得多个参数。

directory = ARGV[0] || Dir.pwd
searchstring = Regexp.new "(\\.[^.]+)$"


extensions = Hash.new {|hash, key| hash[key] = {size: 0, count: 0}}

if File.exists? File.expand_path(directory)
  Dir["#{File.expand_path(directory)}/*/**"].each.map do |f|
    if File.basename(f) =~ searchstring
      extensions[File.extname(f)][:size] += File.stat(f).size
      extensions[File.extname(f)][:count] += 1
      end
    end
else
  puts "This directory does not exist"
end
puts (extensions.map{ |k,v| "Extension: #{k} => #{v}"}.sort)
编辑:我也注意到它只是通过子目录。我知道我可以通过在循环浏览文件名之前删除额外的/ **来让它通过给定的目录。如何查看给定的目录及其所有子目录?

我也认为我已经回答了我自己的问题,我最初通过多个参数循环回答。但是,我仍然不知道如何通过所有子目录。我会发布我的最新代码,这样每个人都可以看到差异。

    ARGV[0]=Dir.pwd if ARGV.length < 1

for i in 0 ... ARGV.length


directory=ARGV[i]
searchstring = Regexp.new "(\\.[^.]+)$"

extensions = Hash.new {|hash, key| hash[key] = {size: 0, count: 0}}

if File.exists? File.expand_path(directory)
  Dir["#{File.expand_path(directory)}/*"].each.map do |f|
    if File.basename(f) =~ searchstring
      extensions[File.extname(f)][:size] += File.stat(f).size
      extensions[File.extname(f)][:count] += 1
      end
    end
else
  puts "This directory does not exist"
end
puts "#{directory}"
puts (extensions.map{ |k,v| "Extension: #{k} => #{v}"}.sort)
end

0 个答案:

没有答案