2011-02-16 12 views
37

Digamos que tengo un archivo en /source.txt, y quiero copiarlo al /a/b/c.txt. /a y /a/b pueden o no existir.Copie un archivo, cree directorios según sea necesario en Ruby

¿Hay alguna manera de copiar el archivo y hacer que cree los directorios principales necesarios si es necesario?

Idealmente, esto sería un comando. En particular, me gustaría evitar analizar las partes del archivo/directorio de la ruta de destino y luego llamar manualmente al FileUtils.mkdir_p y al FileUtils.cp.

Se prefiere Pure Ruby, aunque una solución dependiente de Rails es aceptable.

+1

¿Por qué le gustaría hacer eso en un comando? La mayoría de los sistemas de archivos solo funcionan de esa manera. Necesita un directorio antes de poder colocar archivos en él. ¿Qué pasa con 2 o 3 llamadas? – xinit

+0

1 llamada es más simple que 2. Si * no * se puede hacer en 1 llamada, está bien. –

Respuesta

83

Normalmente, depende de usted asegurarse de que exista la ruta del directorio de destino, por lo que dudo si algún comando incorporado hace lo que está buscando.

Pero usar FileUtils.mkdir_p(dir) podría ser muy sencillo, especialmente al usar File.dirname() para analizar la ruta. Incluso podría envolverlo en una rutina de utilidad, por ejemplo:

require 'fileutils' 

def copy_with_path(src, dst) 
    FileUtils.mkdir_p(File.dirname(dst)) 
    FileUtils.cp(src, dst) 
end 
Cuestiones relacionadas