107 votes

Comment créer des répertoires de manière récursive en ruby ?

Je veux stocker un fichier sous le nom de /a/b/c/d.txt, mais je ne sais pas si l'un de ces répertoires existe et je dois les créer récursivement si nécessaire. Comment peut-on faire cela en ruby ?

204voto

Harmon Wood Points 1689

Utilisez mkdir_p :

FileUtils.mkdir_p '/a/b/c'

En _p est un vestige d'unix pour parent/path, vous pouvez également utiliser l'alias mkpath si cela a plus de sens pour vous.

FileUtils.mkpath '/a/b/c'

Dans Ruby 1.9, FileUtils a été supprimé du noyau, vous devrez donc require 'fileutils' .

9 votes

+1. FileUtils y Pathname sont probablement le site les outils les plus importants pour le scriptage du shell Ruby.

22voto

ferbass Points 161

Utiliser mkdir_p pour créer un répertoire de façon récursive

path = "/tmp/a/b/c"

FileUtils.mkdir_p(path) unless File.exists?(path)

6voto

Matthew Schinckel Points 15596

Si vous travaillez sur des machines unixy, n'oubliez pas que vous pouvez toujours lancer une commande shell sous ruby en la plaçant entre guillemets.

`mkdir -p /a/b/c`

0 votes

Être si positif, c'est ça.

2 votes

Introduire une commande système dans un sous-processus n'est pas la meilleure idée. Il est préférable de le faire avec la bibliothèque standard de Ruby pour obtenir une gestion des erreurs, vérifier le résultat, etc.

4voto

Vadym Tyemirov Points 918

Chemin d'accès à la rescousse !

Pathname('/a/b/c/d.txt').dirname.mkpath

3voto

einarmagnus Points 1716
 require 'ftools'

Fichier.makedirs

1 votes

Merci pour le pointeur ! La documentation semble préférer FileUtils.mkdir_p, donc j'ai pris ça...

0 votes

Il s'agit uniquement d'un alias pour mkdir_p y mkpath ruby-doc.org/stdlib-2.6.5/libdoc/fileutils/rdoc/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X