¿Cómo muevo un archivo con Ruby?


Respuestas:


264

Puede usar FileUtils para hacer esto.

#!/usr/bin/env ruby

require 'fileutils'

FileUtils.mv('/tmp/your_file', '/opt/new/location/your_file')

Recuerda; Si se está moviendo a través de particiones, "mv" copiará el archivo a un nuevo destino y desvinculará la ruta de origen.


Olvidé agregar que no se puede mover a través de particiones. Gracias.
— Željko Filipin

66
En realidad mv hace la copia por ti. "Mueve src de archivo (s) a dest. Si el archivo y dest existen en la partición de disco diferente, el archivo se copia en su lugar". ... ruby-doc.org/core/classes/FileUtils.html#M004330
— Darkerstar

¿Puedes confirmar si el archivo se elimina después de ser copiado de una partición diferente?
— knoopx

89

Una vieja pregunta, me sorprende que nadie haya respondido a esta solución simple. No necesita fileutils o una llamada al sistema, simplemente cambie el nombre del archivo a la nueva ubicación.

File.rename source_path, target_path

Codificación feliz


11
El cambio de nombre del archivo no funcionará en las particiones y arroja el error "Enlace de dispositivo cruzado no válido". FileUtils es una mejor opción en esos casos, pero para un simple movimiento en la misma partición, cambiar el nombre funciona.
— d3vkit

@ d3vkit, gracias por el comentario, pero en Windows esto funciona en unidades, locales y remotas, por ejemplo, <code> File.rename 'c: /test/test.txt', 'e: /test.txt' </code>, que sistema operativo usas
— Peter

1
Ah, tuve problemas específicamente en Ubuntu usando algunos recursos compartidos en red de Windows. También terminé teniendo problemas con FileUtils.mv, que movería el archivo y luego diría que no tenía permiso para eliminar el archivo anterior. Terminé usando FileUtils.cp y luego File.delete para deshacerme del viejo archivo.
— d3vkit

3
Esto definitivamente no funciona a través de la partición en Linux. Supongo que depende de las API del sistema operativo subyacente. Para estar seguro, solo use FileUtils.mv.
— akostadinov

1
Tenga en cuenta que en algunos casos es posible que desee restringir a la misma partición, como lo estoy haciendo ahora para garantizar una operación atómica.
— Zorg

16

FileUtils.move

require "FileUtils"
FileUtils.move 'stuff.rb', '/notexist/lib/ruby'

3
+1 Tenga en cuenta que .move es un alias de .mv, por lo que también debería poder hacer FileUtils.mv.
— Tim Knight

1
Gracias, me gusta .move más que .mv. :)
— Željko Filipin

1
Yo no. mvme hace sentir como si estuviera en mi amada consola;)
— Erik Escobedo

77
Y lo bueno de Rubí es que tiene tanto movey mvlo que uno puede elegir cualquiera de ellos. :)
— Željko Filipin

1
En caso de ser require "fileutils"(sin tapas)
— Clint Pachl


1

Aquí hay una plantilla.

 src_dir = "/full_path/to_some/ex_file.txt"

 dst_dir = "/full_path/target_dir"

 #Use the method below to do the moving
 move_src_to_target_dir(src_dir, dst_dir)



 def archive_src_to_dst_dir(src_dir, dst_dir)

     if File.exist ? (src_dir)

     puts "about to move this file:  #{src_dir}"

     FileUtils.mv(src_dir, dst_dir)
 else

     puts "can not find source file to move"

 end
 end

-8

puedes mover tu archivo así

Rails.root.join ('foo', 'bar')


1
Esa es la respuesta a la pregunta "¿Cómo construyo una ruta / nombre de archivo relativo al directorio raíz de un proyecto Rails?". No mueve nada.
— Andreas Baumgart
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.