2013-05-08 11 views
0

Пытается написать скрипт, который будет искать в каталоге и подкаталогах для определенных файлов. Я хотел бы знать, как создается определенный каталог или каталоги для вызова метода.Метод вызова метода walk walk, когда каталог достигнут

это то, что я пытался и не смог:

def display_directory(path) 
list = Dir[path+'/*'] 
return if list.length == 0 

list.each do |f|  

    if File.directory? f #is it a directory? 
    if File.directory?('config') 
     puts "this is the config folder" 
    end 
    printf "%-50s %s\n", f, "is a directory:".upcase.rjust(25) 
    else 
    printf "%-50s %s\n", f, "is not a directory:".upcase.rjust(25) 
    end 
end 
end 


start = File.join("**") 
puts "Processing directory\n\n".upcase.center(30) 
display_directory start 

это то, что я хочу, чтобы это произошло.

 app 
app/controllers 
app/helpers 
app/mailers 
app/models 
app/models/bugzilla 
app/models/security 
app/views 
app/views/auth 
app/views/calendar 
app/views/layouts 
app/views/step 
app/views/step_mailer 
app/views/suggestion 
app/views/suggestion_mailer 
app/views/task 
app/views/user 
bin 
-------------------------------------- 
config <----------(call method foo) 
config/environments 
config/initializers 
config/locales 
-------------------------------------- 
db 
db/bugzilla 
db/migrate 
db/security 
lib 
lib/tasks 
log 
public 
public/images 
public/javascripts 
public/stylesheets 
script 
script/performance 
script/process 
-------------------------- 
test <---------(call method foobar) 
test/fixtures 
test/fixtures/mailer 
test/functional 
test/integration 
test/performance 
test/unit 
-------------------------- 
vendor 
vendor/plugins 
+0

Почему это не удалось? Ошибка? Что случилось? Каков результат вашего скрипта? Какая рубиновая версия? – fotanus

+0

Он печатает «это папка конфигурации», но это неправильная папка. 'это папка config tmp/cache/B27/910', это каталог, который он не ищет. мой оператор if выключен. –

+0

Я не понял вашу формулировку. Не могли бы вы переформулировать свой вопрос с точными ожиданиями? – dimitarvp

ответ

0

Вместо

if File.directory?('config') 

Попробуйте

if f.path.include?('config') 

, но это будет работать для каждого каталога, которые имеют конфигурации на имя. Вы можете поместить большую подстроку, чтобы лучше совместить.

Кроме того, он очень идиоматичен при использовании рубина do..end для многострочных блоков и {..} для одной линии.

0

Я понял способ. это работает очень хорошо. Я добавил метод для отображения всех файлов в указанном каталоге по достижении.

def special_dir(path) 
    puts "------------------------------------" 
    sp_path = Dir.glob(File.join(path,"*","**")) 
    sp_path.each do |cf| 
    puts "\t" + cf 
    end 
end 

def walk(path) 
    list = Dir[path+'/*'].reject{ |r| r['doc'] || r['tmp']} 
    list.each do |x| 
     path = File.join(path, x) 
     if File.directory?(x) 
     if x =~ /config/ or x =~ /test/ 
      special_dir(x) 
     else 
      puts "#{x}" 
      walk(path) 
     end 
     else 
     #puts x 
     end 
    end 
    end 

    start = File.join("**") 

    walk start