Come posso spostare un file con Ruby?


Risposte:


264

È possibile utilizzare FileUtils per fare questo.

#!/usr/bin/env ruby

require 'fileutils'

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

Ricorda; se ci si sposta attraverso le partizioni, "mv" copierà il file nella nuova destinazione e scollegherà il percorso di origine.


Ho dimenticato di aggiungere che non è possibile spostarsi tra le partizioni. Grazie.
Željko Filipin,

6
In realtà mv fa la copia per te. "Sposta i file src in dest. Se file e dest esistono sulla diversa partizione del disco, il file viene invece copiato." ... ruby-doc.org/core/classes/FileUtils.html#M004330
Darkerstar

puoi confermare se il file viene eliminato dopo essere stato copiato da una partizione diversa?
Knoopx,

89

Una vecchia domanda, sono sorpreso che nessuno abbia risposto a questa semplice soluzione. Non hai bisogno di fileutils o di una chiamata di sistema, basta rinominare il file nella nuova posizione.

File.rename source_path, target_path

Buona codifica


11
La ridenominazione del file non funziona su tutte le partizioni e genera l'errore "Collegamento tra dispositivi non valido". FileUtils è una scelta migliore in questi casi, ma per una semplice mossa nella stessa partizione, rinominare funziona.
d3vkit,

@ d3vkit, grazie per l'osservazione, ma in Windows funziona su unità, locali e remote, ad es. <code> File.rename 'c: /test/test.txt', 'e: /test.txt' </code>, quale sistema operativo usi?
Pietro,

1
Ah, ho avuto problemi in particolare su Ubuntu usando alcune condivisioni di rete di Windows. Ho anche avuto problemi con FileUtils.mv, che spostava il file e diceva che non aveva il permesso di cancellare il vecchio file. Ho finito per usare FileUtils.cp e poi File.delete per sbarazzarmi del vecchio file.
d3vkit,

3
Questo sicuramente non funziona su tutte le partizioni su Linux. Immagino che dipenda dalle API del sistema operativo sottostante. Per essere sicuri, basta usare FileUtils.mv.
Akostadinov,

1
Nota in alcuni casi potresti voler limitare alla stessa partizione, come sto facendo in questo momento per garantire un'operazione atomica.
Zorg,

16

FileUtils.move

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

3
+1 Nota che .move è un alias di .mv, quindi dovresti essere in grado di fare anche FileUtils.mv.
Tim Knight,

1
Grazie, mi piace solo .move more that .mv. :)
Željko Filipin,

1
Io non. mvmi fa sentire come se fossi nella mia amata console;)
Erik Escobedo,

7
E la cosa bella di Ruby è che ha entrambi movee mvquindi uno può sceglierne uno. :)
Željko Filipin,

1
Dovrebbe essere require "fileutils"(senza limiti)
Clint Pachl,


1

ecco un modello.

 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

puoi spostare il tuo file in questo modo

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


1
Questa è la risposta alla domanda "Come faccio a creare un percorso / nome file relativo alla directory principale di un progetto Rails?". Non muove nulla.
Andreas Baumgart,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.