Rubyでファイルを移動するにはどうすればよいですか?


回答:


264

これにはFileUtilsを使用できます。

#!/usr/bin/env ruby

require 'fileutils'

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

覚えておいてください。パーティション間を移動する場合、「mv」はファイルを新しい宛先にコピーし、ソースパスのリンクを解除します。


パーティション間を移動できないことを追加するのを忘れました。ありがとう。
チェリコフィリピン

6
実際にはmvがあなたに代わってコピーします。「ファイルsrcをdestに移動します。fileとdestが別のディスクパーティションに存在する場合、代わりにファイルがコピーされます。」... ruby-doc.org/core/classes/FileUtils.html#M004330
Darkerstar

別のパーティションからコピーした後にファイルが削除されたかどうかを確認できますか?
knoopx 2010

89

古い質問ですが、この単純な解決策に誰も答えていないことに驚いています。fileutilsやシステムコールは必要ありません。ファイルの名前を新しい場所に変更するだけです。

File.rename source_path, target_path

ハッピーコーディング


11
ファイル名の変更はパーティション間で機能せず、「無効なクロスデバイスリンク」というエラーがスローされます。そのような場合はFileUtilsの方が適していますが、同じパーティションで簡単に移動する場合は、名前の変更が機能します。
d3vkit 2013年

@ d3vkit、発言ありがとうございます。Windowsでは、これはローカルとリモートのドライブ間で機能します。例:<code> File.rename 'c:/test/test.txt'、 'e:/test.txt' </ code>、どのOSを使用していますか?
ピーター2013年

1
ああ、私は特にいくつかのWindowsネットワーク共有を使用してUbuntuで問題がありました。また、FileUtils.mvで問題が発生しました。これは、ファイルを移動し、古いファイルを削除する権限がないと言っていました。最終的にFileUtils.cpを使用してから、File.deleteを使用して古いファイルを削除しました。
d3vkit 2013年

3
これはLinuxのパーティション全体では機能しません。基盤となるOS APIに依存すると思います。確かに、単にを使用してくださいFileUtils.mv
akostadinov 2014年

1
現在、アトミック操作を確実にするために、同じパーティションに制限したい場合があることに注意してください。
Zorg

16

FileUtils.move

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

3
+1 .moveは.mvのエイリアスなので、FileUtils.mvも実行できるはずです。
ティムナイト

1
おかげで、私は.mvをもっと移動するのが好きです。:)
ジェリコ・フィリピン

1
私はしません。mv愛するコンソールにいるような気分になります;)
Erik Escobedo

7
Rubyの良いところは、両方moveを備えているmvので、どちらか一方を選択できることです。:)
ジェリコ・フィリピン

1
する必要がありますrequire "fileutils"(大文字なし)
Clint Pachl 2018年


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プロジェクトのルートディレクトリからの相対パス/ファイル名を作成するにはどうすればよいですか?」という質問への答えです。何も動かしません。
Andreas Baumgart 2017年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.