
require 'fileutils'
FileUtils.move 'stuff.rb', '/notexist/lib/ruby'
Спасибо, мне просто нравится .move больше, чем .mv. :)
Я не. mv заставляет меня чувствовать, что я нахожусь в любимой консоли;)
И что хорошо в Ruby, так это то, что в нем есть как move, так и mv, так что можно выбрать любой из них. :)
Должен быть require "fileutils" (без шапки)
Используйте модуль fileutils и используйте FileUtils.mv:
http://www.ruby-doc.org/stdlib-2.0/libdoc/fileutils/rdoc/FileUtils.html#method-c-mv
Вот почему мы должны публиковать ответ, а затем предоставлять ссылку на кредит / ресурс.
Для этого вы можете использовать FileUtils.
#!/usr/bin/env ruby
require 'fileutils'
FileUtils.mv('/tmp/your_file', '/opt/new/location/your_file')
Помнить; если вы перемещаетесь между разделами, «mv» скопирует файл в новое место назначения и отключит исходный путь.
Забыл добавить, что по разделам перемещаться нельзя. Спасибо.
На самом деле mv делает копию за вас. "Перемещает файл (ы) src в dest. Если файл и dest существуют на другом разделе диска, вместо этого файл копируется." ... ruby-doc.org/core/classes/FileUtils.html#M004330
Вы можете подтвердить, что файл был удален после копирования из другого раздела?
Старый вопрос, я удивлен, что никто не ответил на это простое решение. Вам не нужны fileutils или системный вызов, просто переименуйте файл в новое место.
File.rename source_path, target_path
Удачного кодирования
Переименование файлов не работает между разделами и выдает ошибку «Недопустимая связь между устройствами». FileUtils - лучший выбор в этих случаях, но для простого перемещения в том же разделе переименование работает.
@ d3vkit, спасибо за замечание, но в Windows это работает на дисках, локальных и удаленных, например <code> File.rename 'c: /test/test.txt', 'e: /test.txt' </code>, какую ОС вы используете?
Ах, у меня были проблемы именно в Ubuntu с использованием некоторых сетевых ресурсов Windows. У меня также возникли проблемы с FileUtils.mv, который переместил файл, а затем сказал, что у него нет разрешения на удаление старого файла. В итоге я использовал FileUtils.cp, а затем File.delete, чтобы избавиться от старого файла.
Это определенно не работает с разделами в Linux. Я предполагаю, что это зависит от базовых API ОС. Чтобы быть уверенным, просто используйте FileUtils.mv.
Обратите внимание, что в некоторых случаях вы можете хочу ограничить одним и тем же разделом, как я делаю прямо сейчас, чтобы обеспечить атомарную операцию.
@ Zorg Согласен, если вы хотите использовать кросс-платформу, если другой раздел и! [OS] = ~ Windows требуют 'fileutils'; FileUtils.mv или что-то в этом роде, в любом случае я бы всегда пытался поймать перемещение файла, и в таком случае я также предпочел бы сразу использовать FileUtils
вот шаблон.
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
вы можете переместить свой файл вот так
Rails.root.join ('фу', 'бар')
Это ответ на вопрос «Как создать путь / имя файла относительно корневого каталога проекта Rails?». Он ничего не двигает.
+1 Обратите внимание, что .move - это псевдоним .mv, поэтому вы также можете использовать FileUtils.mv.