Як перемістити файл з Ruby?


Відповіді:


264

Ви можете використовувати FileUtils для цього.

#!/usr/bin/env ruby

require 'fileutils'

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

Пам'ятайте; якщо ви переходите через розділи, "mv" скопіює файл до нового пункту призначення та від'єднає вихідний шлях.


Я забув додати, що не можна рухатись через перегородки. Дякую.
Желько Філіпін

6
Насправді mv робить копію за вас. "Переміщає файл (и) src до dest. Якщо файл і dest існують на різному розділі диска, файл замість нього скопіюється." ... ruby-doc.org/core/classes/FileUtils.html#M004330
Darkerstar

чи можете ви підтвердити, що файл видалено після копіювання з іншого розділу?
knoopx

89

Старе питання, я здивований, що ніхто не відповів на це просте рішення. Вам не потрібні файлети або системний виклик, просто перейменуйте файл на нове місце.

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 API. Щоб бути впевненим, просто використовуйте FileUtils.mv.
акостадінов

1
Примітка У деяких випадках ви можете хотіти обмежити в тому ж розділі, що я роблю зараз , щоб атомне операцію.
Zorg

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', 'bar')


1
Ось відповідь на питання "Як створити шлях / ім'я файлу щодо кореневого каталогу проекту Rails?". Це нічого не рухає.
Андреас Баумгарт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.