ฉันจะย้ายไฟล์ด้วย Ruby ได้อย่างไร


คำตอบ:


264

คุณสามารถใช้ FileUtils เพื่อทำสิ่งนี้

#!/usr/bin/env ruby

require 'fileutils'

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

โปรดจำไว้ว่า; หากคุณย้ายข้ามพาร์ติชั่น "mv" จะคัดลอกไฟล์ไปยังปลายทางใหม่และยกเลิกการเชื่อมโยงพา ธ ต้นทาง


ฉันลืมที่จะเพิ่มว่าคุณไม่สามารถย้ายข้ามพาร์ทิชัน ขอบคุณ
Željko Filipin

6
mv ทำสำเนาให้คุณจริงๆ "ย้ายไฟล์ src ไปยังปลายทางหากไฟล์และปลายทางมีอยู่บนพาร์ติชันดิสก์อื่นไฟล์จะถูกคัดลอกแทน" ... ruby-doc.org/core/classes/FileUtils.html#M004330
Darkerstar

คุณจะยืนยันได้อย่างไรว่าไฟล์ถูกลบหลังจากคัดลอกจากพาร์ติชั่นอื่น
knoopx

89

เป็นคำถามเก่าฉันประหลาดใจที่ไม่มีใครตอบคำตอบง่ายๆนี้ คุณไม่ต้องการ fileutils หรือ systemcall เพียงแค่เปลี่ยนชื่อไฟล์เป็นตำแหน่งใหม่

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 ได้ ฉันเดาว่ามันขึ้นอยู่กับ OS API พื้นฐาน FileUtils.mvเพื่อให้แน่ใจว่าการใช้งานเพียงแค่
akostadinov

1
หมายเหตุในบางกรณีคุณอาจต้องการจำกัด พาร์ทิชันเดียวกันขณะที่ฉันกำลังทำเพื่อให้แน่ใจว่าการดำเนินการของอะตอม
Zorg

16

FileUtils.move

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

3
+1 โปรดทราบว่า. move เป็นชื่อแทนของ. mv ดังนั้นคุณควรทำ FileUtils.mv ด้วย
Tim Knight

1
ขอบคุณฉันชอบมากย้ายที่. mv :)
Željko Filipin

1
ฉันไม่. mvทำให้ฉันรู้สึกเหมือนฉันในคอนโซลที่รักของเรา)
เอริค Escobedo

7
และสิ่งที่ดีเกี่ยวกับทับทิมก็คือมันมีทั้งคู่moveและmvอย่างใดอย่างหนึ่งสามารถเลือกอย่างใดอย่างหนึ่ง :)
Željko Filipin

1
ควรเป็นrequire "fileutils"(ไม่มีตัวพิมพ์ใหญ่)
Clint Pachl


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 ได้อย่างไร" มันไม่ย้ายอะไรเลย
Andreas Baumgart
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.