2010-10-06 5 views
0

Dans Ruby 1.8, comment supprimer un arbre de répertoires où certains sous-répertoires commencent par '.'? Par exemple, j'ai un répertoire de système de fichiers Linux intégré que je veux nettoyer. L'un de ses sous-répertoires est ./dev/.udev/files.Comment vider un répertoire avec .directories

Dir[ "{**/*,**/.**,**/.*}" ].sort.reverse.each do | p | 
    puts p 
    if ((p != '..') and (p != '.')) then 
     if File.directory? p then 
      Dir.rmdir p 
     else 
      File.delete p 
     end 
    end 
end 

Cela reconnaît ./dev/.udev/, mais il ne supprime pas les fichiers (ou les fichiers et répertoires) sous .udev.

Je me rends compte que je pourrais être brutal et exécuter

system("rm -Rf *") 

à partir du répertoire de travail, mais j'aimerais mieux comprendre la méthodologie englobement.

Merci d'avance! : D

Répondre

0

Vous pouvez essayer

Dir.glob(".[^.]*") 

Pour enlever le répertoire, vous pouvez essayer de supprimer tous les fichiers dans le répertoire, puis faire le supprimer, ou vous pouvez utiliser FileUtils.rm_rf. Voir le FileUtils doc pour plus d'informations

+0

Le Dir []. Sort.reverse était destiné à lister les fichiers les plus profonds avant le répertoire dans lequel ils résident. Il fonctionne parfaitement sauf que les patterns glob ** et * n'acceptent pas les fichiers ou des répertoires qui commencent par. –

+0

Nous vous remercions de votre suggestion sur FileUtils; c'est plus propre que le système(). :RÉ –

Questions connexes