Ruby ile bir dosyayı nasıl taşırım?


Yanıtlar:


264

Bunu yapmak için FileUtils kullanabilirsiniz.

#!/usr/bin/env ruby

require 'fileutils'

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

Hatırlamak; bölümler arasında hareket ediyorsanız, "mv" dosyayı yeni hedefe kopyalar ve kaynak yolun bağlantısını kaldırır.


Bölümler arasında hareket edemeyeceğinizi eklemeyi unuttum. Teşekkürler.
jeljko Filipin

6
Aslında mv sizin için kopya yapar. Msgstr "Dosya (lar) ı src'yi hedefe taşır. Farklı disk bölümünde dosya ve hedef varsa, dosya kopyalanır." ... ruby-doc.org/core/classes/FileUtils.html#M004330
Darkerstar

farklı bir bölümden kopyalandıktan sonra dosyanın silinip silinmediğini onaylayabilir misiniz?
knoopx

89

Eski bir soru, kimsenin bu basit çözümü cevaplamadığına şaşırdım. Dosya ayarlarına veya sistem aramasına ihtiyacınız yoktur, dosyayı yeni konuma yeniden adlandırmanız yeterlidir.

File.rename source_path, target_path

Mutlu kodlama


11
Dosya yeniden adlandırma bölümler arasında çalışmaz ve "Geçersiz cihazlar arası bağlantı" hatasını atar. FileUtils bu durumlarda daha iyi bir seçimdir, ancak aynı bölümdeki basit bir hareket için yeniden adlandırır.
d3vkit

@ d3vkit, sözler için teşekkürler, ancak pencerelerde bu, yerel ve uzak sürücülerde çalışır, örneğin <code> Dosya.rename 'c: /test/test.txt', 'e: /test.txt' </code>, hangi işletim sistemini kullanıyorsunuz?
peter

1
Ah, özellikle Ubuntu'da bazı Windows ağ paylaşımlarını kullanarak sorun yaşadım. Ayrıca FileUtils.mv, dosyayı taşımak ve daha sonra eski dosyayı silme izni olmadığını söyleyerek sorunla sona erdi. Eski dosyadan kurtulmak için FileUtils.cp ve ardından File.delete kullanarak sonlandırdım.
d3vkit

3
Bu kesinlikle linux üzerindeki bölümlerde işe yaramaz. Sanırım temel OS API'larına bağlıdır. Emin olmak için, sadece kullanın FileUtils.mv.
akostadinov

1
Bazı durumlarda , şu anda bir atomik işlem sağlamak için yaptığım gibi, aynı bölümle kısıtlamak isteyebileceğinizi unutmayın .
Zorg

16

FileUtils.move

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

3
+1 .move dosyasının .mv bir diğer adı olduğuna dikkat edin, bu nedenle FileUtils.mv dosyasını da yapabilmeniz gerekir.
Tim Knight

1
Teşekkürler. :)
Željko Filipin

1
Yapmıyorum. mvsevgili konsolumdaymışım gibi hissettiriyor;)
Erik Escobedo

7
Ve Ruby ile ilgili güzel şey, her ikisine de sahip olması moveve mvböylece ikisinden birini seçebilmesidir. :)
Željko Filipin

1
Olmalı require "fileutils"(
kapaksız


1

işte bir şablon.

 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

dosyanızı böyle taşıyabilirsiniz

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


1
"Bir Rails projesinin kök dizinine göre nasıl bir yol / dosya adı oluşturabilirim?" Sorusunun cevabı budur. Hiçbir şey taşımaz.
Andreas Baumgart
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.