2011-04-14 1 views
0

J'utilise le code suivant pour convertir les fichiers de php en html. Pour que cela fonctionne, je dois entrer le nom de chaque fichier sur la deuxième ligne.Comment rechercher automatiquement des fichiers d'un type spécifié dans le répertoire en cours ou dans un sous-dossier spécifié dans Ruby?

p "convert files" 
%w(file1 file2 file3).each do |name| 
    system %(php #{DIR}/#{name}.php > #{DIR2}/#{name}.htm) 
end 

Quelqu'un peut-il me dire comment faire en sorte qu'il trouvera automatiquement les fichiers .php dans le répertoire principal et regarder dans un dossier défini et leurs sous-dossiers pour .php supplémentaires et les enregistrer dans les noms de dossiers similaires ?

Par exemple:

file1.php -> file1.htm 
about-us/file2.php -> about-us/file2.htm 
contact-us/department/file3.php -> contact-us/department/file3.htm 

Répondre

1

La façon la plus simple est d'utiliser Dir:

Dir.chdir('where_the_php_files_area') 
Dir['**/*.php'].each do |php| 
    htm = 'where_the_html_files_should_go/' + php.sub(/\.php$/, '.htm') 
    system("php #{php} > #{htm}") 
end 

Le modèle ** pour Dir.glob (AKA Dir[]) correspond à des répertoires récursive si Dir[**/*.php] vous donnera tous les fichiers PHP dans le répertoire actuel.

+0

Merci! Donc, si je voulais exclure un répertoire comme "includes" (et éventuellement d'autres), comment pourrais-je faire cela? – Cofey

+0

@Cofey: La manière la plus simple serait d'ajouter un contrôle if (i_like_this_path (File.dirname (php)) 'dans le bloc. [' File.dirname'] (http://www.ruby-doc.org/ core/classes/File.html # M000027) vous donnera la partie répertoire du nom de fichier et vous devrez fournir quelque chose de sensé pour 'i_like_this_path()'. –

+0

@Andrew Grimm: Laissez mon indentation seul s'il vous plaît .Je trouve le Ruby standard de deux espaces pour être complètement illisible et j'ai autant d'attitude à ce sujet que la communauté Ruby :) –

Questions connexes