Quiero almacenar un archivo como /a/b/c/d.txt, pero no sé si existe alguno de estos directorios y necesito crearlos de forma recursiva si es necesario. ¿Cómo se puede hacer esto en rubí?
101
Utilizar mkdir_p
:
FileUtils.mkdir_p '/a/b/c'
El _p
es un vestigio de UNIX para los padres / ruta también se puede utilizar el alias mkpath
si eso tiene más sentido para usted.
FileUtils.mkpath '/a/b/c'
En Ruby 1.9 FileUtils se eliminó del núcleo, por lo que tendrá que hacerlo require 'fileutils'
.
Utilice mkdir_p para crear directorio de forma recursiva
path = "/tmp/a/b/c"
FileUtils.mkdir_p(path) unless File.exists?(path)
Si está ejecutando en máquinas Unixy, no olvide que siempre puede ejecutar un comando de shell bajo ruby colocándolo entre comillas invertidas.
`mkdir -p /a/b/c`
require 'ftools'
Pathname al rescate!
Pathname('/a/b/c/d.txt').dirname.mkpath
FileUtils.mkdir_p '/a/b/c'
+ crear d.txt
al mismo tiempo?
Pathname('/a/b/c/d.txt').dirname.mkpath
y File.write('/a/b/c/d.txt', content)
sin filename = '/a/b/c/d.txt'.rpartition('/').last
y el resto del análisis
También puedes usar tu propia lógica
def self.create_dir_if_not_exists(path)
recursive = path.split('/')
directory = ''
recursive.each do |sub_directory|
directory += sub_directory + '/'
Dir.mkdir(directory) unless (File.directory? directory)
end
end
Entonces, si la ruta es 'tmp / a / b / c' si 'tmp' no existe, se crea 'tmp', entonces 'tmp / a /' y así sucesivamente.
FileUtils
yPathname
son probablemente las herramientas más importantes para la creación de scripts de shell Ruby.