Bagaimana cara saya memindahkan file dengan Ruby?

173

Saya ingin memindahkan file dengan Ruby. Bagaimana aku melakukan itu?

Željko Filipin
sumber

Jawaban:

264

Anda dapat menggunakan FileUtils untuk melakukan ini.

#!/usr/bin/env ruby

require 'fileutils'

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

Ingat; jika Anda bergerak melintasi partisi, "mv" akan menyalin file ke tujuan baru dan memutuskan tautan jalur sumber.

Berk D. Demir
sumber
Saya lupa menambahkan bahwa Anda tidak dapat berpindah partisi. Terima kasih.
Željko Filipin
6
Sebenarnya mv melakukan copy untuk Anda. "Memindahkan file src ke dest. Jika file dan dest ada pada partisi disk yang berbeda, file tersebut disalin sebagai gantinya." ... ruby-doc.org/core/classes/FileUtils.html#M004330
Darkerstar
dapatkah Anda mengonfirmasi jika file dihapus setelah disalin dari partisi lain?
knoopx
89

Sebuah pertanyaan lama, saya terkejut tidak ada yang menjawab solusi sederhana ini. Anda tidak perlu fileutils atau panggilan sistem, cukup ganti nama file tersebut ke lokasi baru.

File.rename source_path, target_path

Selamat coding

Peter
sumber
11
Ganti nama file tidak akan berfungsi di seluruh partisi, dan melempar kesalahan "Tautan lintas-perangkat tidak valid". FileUtils adalah pilihan yang lebih baik dalam kasus-kasus itu, tetapi untuk langkah sederhana di partisi yang sama, ganti nama berfungsi.
d3vkit
@ d3vkit, terima kasih untuk komentar tetapi di windows ini berfungsi lintas drive, lokal dan jarak jauh, misalnya <code> File.rename 'c: /test/test.txt', 'e: /test.txt' </code>, OS apa yang Anda gunakan?
peter
1
Ah, saya punya masalah khusus di Ubuntu menggunakan beberapa saham jaringan Windows. Saya juga akhirnya mengalami masalah dengan FileUtils.mv, yang akan memindahkan file dan kemudian mengatakan itu tidak memiliki izin untuk menghapus file yang lama. Saya akhirnya menggunakan FileUtils.cp dan kemudian File.delete untuk menyingkirkan file yang lama.
d3vkit
3
Ini jelas tidak berfungsi di partisi di linux. Saya kira itu tergantung pada API OS yang mendasarinya. Yang pasti, cukup gunakan FileUtils.mv.
akostadinov
1
Catatan dalam beberapa kasus, Anda mungkin ingin membatasi ke partisi yang sama, seperti yang saya lakukan sekarang untuk memastikan operasi atom.
Zorg
16

FileUtils.move

require "FileUtils"
FileUtils.move 'stuff.rb', '/notexist/lib/ruby'
Željko Filipin
sumber
3
+1 Perhatikan bahwa .move adalah alias dari .mv sehingga Anda juga dapat melakukan FileUtils.mv.
Tim Knight
1
Terima kasih, saya hanya suka .mov lebih dari itu .mv. :)
Željko Filipin
1
Bukan saya. mvmembuat saya merasa seperti berada di konsol kesayangan saya;)
Erik Escobedo
7
Dan hal yang baik tentang Ruby adalah bahwa ia memiliki kedua movedan mvjadi salah satu dapat memilih salah satu baik. :)
Željko Filipin
1
Seharusnya require "fileutils"(tanpa topi)
Clint Pachl
1

di sini adalah templat.

 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
zee
sumber
-8

Anda dapat memindahkan file Anda seperti ini

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

kajal
sumber
1
Itulah jawaban untuk pertanyaan "Bagaimana cara membangun jalur / nama file relatif ke direktori root proyek Rails?". Itu tidak bergerak apa pun.
Andreas Baumgart