Comment déplacer un fichier avec Ruby?


Réponses:


264

Vous pouvez utiliser FileUtils pour ce faire.

#!/usr/bin/env ruby

require 'fileutils'

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

Rappelles toi; si vous vous déplacez à travers les partitions, "mv" copiera le fichier vers la nouvelle destination et dissociera le chemin source.


J'ai oublié d'ajouter que vous ne pouvez pas vous déplacer entre les partitions. Merci.
Željko Filipin

6
En fait, mv fait la copie pour vous. "Déplace le (s) fichier (s) src vers dest. Si le fichier et la destination existent sur la partition de disque différente, le fichier est copié à la place." ... ruby-doc.org/core/classes/FileUtils.html#M004330
Darkerstar

pouvez-vous confirmer si le fichier est supprimé après avoir été copié à partir d'une autre partition?
knoopx

89

Une vieille question, je suis surpris que personne n'ait répondu à cette solution simple. Vous n'avez pas besoin de fileutils ou d'un appel système, renommez simplement le fichier au nouvel emplacement.

File.rename source_path, target_path

Bon codage


11
Le changement de nom de fichier ne fonctionnera pas sur les partitions et génère l'erreur «Lien inter-périphérique non valide». FileUtils est un meilleur choix dans ces cas, mais pour un simple déplacement dans la même partition, le changement de nom fonctionne.
d3vkit

@ d3vkit, merci pour la remarque, mais dans Windows cela fonctionne sur les lecteurs, locaux et distants, par exemple <code> File.rename 'c: /test/test.txt', 'e: /test.txt' </code>, quel OS utilisez-vous?
peter

1
Ah, j'ai eu des problèmes spécifiquement dans Ubuntu en utilisant certains partages en réseau Windows. J'ai également eu des problèmes avec FileUtils.mv, qui déplaçait le fichier et disait ensuite qu'il n'avait pas l'autorisation de supprimer l'ancien fichier. J'ai fini par utiliser FileUtils.cp puis File.delete pour me débarrasser de l'ancien fichier.
d3vkit

3
Cela ne fonctionne certainement pas entre les partitions sous Linux. Je suppose que cela dépend des API du système d'exploitation sous-jacentes. Pour être sûr, utilisez simplement FileUtils.mv.
akostadinov

1
Notez que dans certains cas, vous voudrez peut - être vous limiter à la même partition, comme je le fais en ce moment pour assurer une opération atomique.
Zorg

16

FileUtils.move

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

3
+1 Notez que .move est un alias de .mv donc vous devriez être capable de faire FileUtils.mv aussi.
Tim Knight

1
Merci, j'aime juste .move plus que .mv. :)
Željko Filipin

1
Je ne. mvme donne l'impression d'être dans ma console bien-aimée;)
Erik Escobedo

7
Et ce qui est bien avec Ruby, c'est qu'il a les deux moveet mvque l'on peut donc choisir l'un ou l'autre. :)
Željko Filipin

1
Devrait être require "fileutils"(sans majuscules)
Clint Pachl


1

voici un modèle.

 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

vous pouvez déplacer votre fichier comme ceci

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


1
C'est la réponse à la question "Comment créer un chemin / nom de fichier relatif au répertoire racine d'un projet Rails?". Cela ne bouge rien.
Andreas Baumgart
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.