Como movo um arquivo com Ruby?


Respostas:


264

Você pode usar o FileUtils para fazer isso.

#!/usr/bin/env ruby

require 'fileutils'

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

Lembrar; se você estiver movendo entre partições, "mv" copiará o arquivo para o novo destino e desvinculará o caminho de origem.


Esqueci de acrescentar que você não pode se mover entre partições. Obrigado.
Željko Filipin

6
Na verdade, o mv faz a cópia para você. "Move o (s) arquivo (s) src para dest. Se existirem arquivo e destino em diferentes partições do disco, o arquivo será copiado." ... ruby-doc.org/core/classes/FileUtils.html#M004330
Darkerstar

você pode confirmar se o arquivo foi excluído após ser copiado de uma partição diferente?
precisa saber é o seguinte

89

Uma pergunta antiga, estou surpreso que ninguém respondeu a esta solução simples. Você não precisa de fileutils ou de uma chamada de sistema, apenas renomeie o arquivo para o novo local.

File.rename source_path, target_path

Feliz codificação


11
A renomeação de arquivo não funciona entre partições e gera o erro "Link de dispositivo inválido". O FileUtils é uma escolha melhor nesses casos, mas, para uma simples movimentação na mesma partição, renomear funciona.
d3vkit

@ d3vkit, obrigado pelo comentário, mas no Windows isso funciona em unidades, local e remota, por exemplo, <code> File.rename 'c: /test/test.txt', 'e: /test.txt' </code>, qual sistema operacional você usa?
Peter

1
Ah, tive problemas especificamente no Ubuntu, usando alguns compartilhamentos em rede do Windows. Também acabei tendo problemas com o FileUtils.mv, que movia o arquivo e depois dizia que não tinha permissão para excluir o arquivo antigo. Acabei usando o FileUtils.cp e o File.delete para se livrar do arquivo antigo.
d3vkit

3
Definitivamente, isso não funciona na partição no linux. Eu acho que depende das APIs subjacentes do SO. Para ter certeza, basta usar FileUtils.mv.
akostadinov

1
Nota, em alguns casos, você pode desejar para restringir a mesma partição, como eu estou fazendo agora para garantir uma operação atômica.
Zorg

16

FileUtils.move

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

3
+1 Observe que .move é um alias de .mv, portanto você deve poder fazer o FileUtils.mv também.
Tim Knight

1
Obrigado, eu apenas gosto de .move mais que .mv. :)
Željko Filipin

1
Eu não. mvfaz-me sentir como estou em meu amado consola;)
Erik Escobedo

7
E o legal do Ruby é que ele possui os dois movee, mvportanto, é possível escolher um deles. :)
Željko Filipin

1
Deve ser require "fileutils"(sem maiúsculas)
Clint Pachl


1

aqui está um modelo

 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

você pode mover seu arquivo assim

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


1
Essa é a resposta para a pergunta "Como construo um caminho / nome de arquivo em relação ao diretório raiz de um projeto Rails?". Não move nada.
Andreas Baumgart
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.