2013-05-08 1 views
0

Vous essayez d'écrire un script qui recherchera dans un répertoire et des sous-répertoires pour des fichiers spécifiques. Je voudrais savoir comment un certain répertoire ou des annuaires viennent pour appeler une méthode.Méthode d'appel du répertoire de marche lorsque le répertoire est atteint

ce que j'ai essayé et échoué:

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 

ce que je veux arriver.

 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

pourquoi il a échoué? Erreur? Qu'est-il arrivé? Quelle est la sortie de votre script? Quelle version de ruby? – fotanus

+0

Il imprime "c'est le dossier config" mais c'est le mauvais dossier. 'c'est le dossier de config tmp/cache/B27/910' est vrai c'est un répertoire juste pas celui que je cherche. ma déclaration if est désactivée. –

+0

Je n'ai pas compris votre libellé. Pouvez-vous reformuler votre question avec des attentes précises? – dimitarvp

Répondre

0

lieu

if File.directory?('config') 

Essayez

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

mais cela fonctionne pour tous les répertoires qui ont config sur le nom. Vous pouvez mettre une plus grande sous-chaîne pour faire une meilleure correspondance.

En outre, il est très idiomatique dans l'utilisation de rubis do..end pour les blocs multilignes et {..} pour une seule ligne.

0

J'ai trouvé un moyen. Cela fonctionne plutôt bien. J'ai ajouté une méthode pour montrer tous les fichiers dans le répertoire mentionné une fois atteint.

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 
Questions connexes