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 또는 시스템 호출이 필요하지 않으며 파일 이름을 새 위치로 바꾸십시오.

File.rename source_path, target_path

행복한 코딩


11
파일 이름 변경이 여러 파티션에서 작동하지 않으며 "잘못된 교차 장치 링크"오류가 발생합니다. 이러한 경우 FileUtils가 더 나은 선택이지만 동일한 파티션에서 간단한 이동을 위해 이름 바꾸기가 작동합니다.
d3vkit

@ d3vkit, 감사합니다. 그러나 Windows에서는 로컬 및 원격 드라이브에서 작동합니다 (예 : <code> File.rename 'c : /test/test.txt', 'e : /test.txt'</ code>, 어떤 OS를 사용하십니까?
peter

1
아, 우분투에서 Windows 네트워크 공유를 사용하는 데 문제가있었습니다. 또한 FileUtils.mv에 문제가있어 파일을 이동 한 다음 이전 파일을 삭제할 권한이 없다고 말합니다. FileUtils.cp를 사용한 다음 File.delete를 사용하여 이전 파일을 제거했습니다.
d3vkit

3
이것은 Linux의 파티션에서 작동하지 않습니다. 기본 OS API에 달려 있다고 생각합니다. 확실하게을 사용하십시오 FileUtils.mv.
akostadinov

1
당신은 어떤 경우에 참고 하고자 내가 원자 작동을 보장하기 위해 지금하고 있어요 같이 동일한 파티션에 제한 할 수 있습니다.
Zorg December

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내가 사랑하는 콘솔에있는 것처럼 느끼게한다;)
Erik 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', 'bar')


1
이것이 "Rails 프로젝트의 루트 디렉토리에 상대적인 경로 / 파일 이름을 어떻게 작성합니까?"라는 질문에 대한 답변입니다. 아무것도 움직이지 않습니다.
Andreas Baumgart
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.