Как мне переместить файл с помощью Ruby?


Ответы:


264

Вы можете использовать FileUtils для этого.

#!/usr/bin/env ruby

require 'fileutils'

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

Помните; если вы перемещаетесь по разделам, «mv» скопирует файл в новое место назначения и отменит связь с исходным путем.


Я забыл добавить, что вы не можете перемещаться между разделами. Спасибо.
Желько Филиппин

6
На самом деле М.В. делает копию для вас. «Перемещает файл (ы) src в dest. Если файл и dest существуют в другом разделе диска, файл копируется вместо этого». ... ruby-doc.org/core/classes/FileUtils.html#M004330
Darkerstar

Вы можете подтвердить удаление файла после копирования из другого раздела?
knoopx

89

Старый вопрос, я удивлен, что никто не ответил на это простое решение. Вам не нужны fileutils или системный вызов, просто переименуйте файл в новое место.

File.rename source_path, target_path

Удачного кодирования


11
Переименование файла не будет работать между разделами, и выдает ошибку «Неверная ссылка между устройствами». FileUtils - лучший выбор в этих случаях, но для простого перемещения в том же разделе переименование работает.
d3vkit

@ d3vkit, спасибо за замечание, но в Windows это работает на дисках, локальных и удаленных, например, <code> File.rename 'c: /test/test.txt', 'e: /test.txt' </ code>, какую ОС вы используете?
Питер

1
Ах, у меня были проблемы именно в Ubuntu с использованием некоторых сетевых ресурсов Windows. У меня также возникли проблемы с FileUtils.mv, который переместил файл и сказал, что у него нет разрешения на удаление старого файла. В итоге я использовал FileUtils.cp, а затем File.delete, чтобы избавиться от старого файла.
d3vkit

3
Это определенно не работает через раздел на Linux. Я полагаю, это зависит от API-интерфейсов ОС. Чтобы быть уверенным, просто используйте FileUtils.mv.
Акостадинов

1
Обратите внимание, что в некоторых случаях вы можете захотеть ограничиться одним и тем же разделом, как я сейчас делаю, чтобы обеспечить атомарную операцию.
Зорг

16

FileUtils.move

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

3
+1 Обратите внимание, что .move - это псевдоним .mv, так что вы также можете использовать FileUtils.mv.
Тим Найт

1
Спасибо, мне просто нравится больше .mv. :)
Желько Филиппин

1
Я не. mvзаставляет меня чувствовать, что я в своей любимой консоли;)
Эрик Эскобедо

7
И хорошая вещь о Руби является то , что она имеет как moveи mvпоэтому можно выбрать любой из них. :)
Желько Филипин

1
Должно быть require "fileutils"(без шапки)
Клинт Пахл


1

вот шаблон.

 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

Вы можете переместить свой файл, как это

Rails.root.join ( 'Foo', 'бар')


1
Это ответ на вопрос «Как построить путь / имя файла относительно корневого каталога проекта Rails?». Это ничего не трогает.
Андреас Баумгарт
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.