182 votes

Comment déplacer un fichier avec Ruby ?

Je veux déplacer un fichier avec Ruby. Comment faire ?

284voto

Berk D. Demir Points 2438

Vous pouvez utiliser FileUtils pour ce faire.

#!/usr/bin/env ruby

require 'fileutils'

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

N'oubliez pas que si vous vous déplacez d'une partition à l'autre, "mv" copiera le fichier vers la nouvelle destination et dissociera le chemin d'accès à la source.

0 votes

J'ai oublié d'ajouter qu'il n'est pas possible de se déplacer d'une partition à l'autre. Merci de votre compréhension.

6 votes

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 une partition différente, le fichier est copié à la place." ... ruby-doc.org/core/classes/FileUtils.html#M004330

0 votes

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

91voto

peter Points 15430

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, il suffit de renommer le fichier au nouvel emplacement.

File.rename source_path, target_path

Bon codage

12 votes

Le renommage de fichiers ne fonctionne pas entre les partitions et génère l'erreur "Invalid cross-device link". FileUtils est un meilleur choix dans ce cas, mais pour un simple déplacement dans la même partition, renommer fonctionne.

0 votes

@d3vkit, merci pour la remarque mais sous Windows cela fonctionne sur tous les lecteurs, locaux et distants, par exemple <code>File.rename 'c:/test/test.txt', 'e:/test.txt'</code>, quel système d'exploitation utilisez-vous ?

1 votes

Ah, j'ai eu des problèmes spécifiques dans Ubuntu en utilisant des 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 la permission de supprimer l'ancien fichier. J'ai fini par utiliser FileUtils.cp puis File.delete pour me débarrasser de l'ancien fichier.

16voto

Željko Filipin Points 18582

FileUtils.move

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

3 votes

+1 Notez que .move est un alias de .mv, vous devriez donc pouvoir faire FileUtils.mv également.

1 votes

Merci, c'est juste que j'aime mieux .move que .mv :)

1 votes

Je ne le fais pas. mv J'ai l'impression d'être dans ma console bien-aimée ;)

11voto

Nicolas Martyanoff Points 1102

Utilisez le module 'fileutils' et utilisez FileUtils.mv :

http://www.ruby-doc.org/stdlib-2.0/libdoc/fileutils/rdoc/FileUtils.html#method-c-mv

1 votes

C'est la raison pour laquelle nous devrions publier la réponse et fournir un lien pour le crédit/la ressource.

1voto

NullSoulException Points 808

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X