Jak przenieść plik za pomocą Rubiego?

173

Chcę przenieść plik za pomocą Rubiego. W jaki sposób mogę to zrobić?

Željko Filipin
źródło

Odpowiedzi:

264

Możesz to zrobić za pomocą FileUtils.

#!/usr/bin/env ruby

require 'fileutils'

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

Zapamiętaj; jeśli przenosisz się między partycjami, "mv" skopiuje plik do nowego miejsca docelowego i rozłączy ścieżkę źródłową.

Berk D. Demir
źródło
Zapomniałem dodać, że nie można poruszać się po partycjach. Dzięki.
Željko Filipin
6
Właściwie mv wykonuje kopię za Ciebie. „Przenosi źródło (i) plików do miejsca docelowego. Jeśli plik i miejsce docelowe istnieją na innej partycji dysku, plik jest kopiowany”. ... ruby-doc.org/core/classes/FileUtils.html#M004330
Darkerstar
czy możesz potwierdzić, czy plik został usunięty po skopiowaniu z innej partycji?
knoopx
89

Stare pytanie, jestem zaskoczony, że nikt nie odpowiedział na to proste rozwiązanie. Nie potrzebujesz plików fileutils ani wywołania systemowego, po prostu zmień nazwę pliku na nową lokalizację.

File.rename source_path, target_path

Miłego kodowania

Piotr
źródło
11
Zmiana nazwy pliku nie działa na partycjach i generuje błąd „Nieprawidłowe łącze między urządzeniami”. FileUtils jest lepszym wyborem w takich przypadkach, ale w przypadku prostego przenoszenia na tej samej partycji zmiana nazwy działa.
d3vkit
@ d3vkit, dziękuję za uwagę, ale w Windows działa to na dyskach, lokalnych i zdalnych, np. <code> File.rename 'c: /test/test.txt', 'e: /test.txt' </code>, jakiego systemu operacyjnego używasz?
Piotr
1
Ach, miałem problemy, szczególnie w Ubuntu, używając niektórych udziałów sieciowych Windows. Skończyło się też na problemie z FileUtils.mv, który mógł przenieść plik, a następnie powiedzieć, że nie ma uprawnień do usunięcia starego pliku. Skończyło się na użyciu FileUtils.cp, a następnie File.delete, aby pozbyć się starego pliku.
d3vkit
3
To zdecydowanie nie działa w przypadku partycji w systemie Linux. Myślę, że to zależy od bazowych API systemu operacyjnego. Dla pewności po prostu użyj FileUtils.mv.
akostadinov
1
Zauważ, że w niektórych przypadkach możesz chcieć ograniczyć się do tej samej partycji, co robię teraz, aby zapewnić niepodzielną operację.
Zorg
16

FileUtils.move

require "FileUtils"
FileUtils.move 'stuff.rb', '/notexist/lib/ruby'
Željko Filipin
źródło
3
+1 Zauważ, że .move jest aliasem .mv, więc powinieneś być w stanie zrobić również FileUtils.mv.
Tim Knight
1
Dzięki, po prostu lubię .move bardziej niż .mv. :)
Željko Filipin
1
Ja nie. mvsprawia, że ​​czuję się jak w mojej ukochanej konsoli;)
Erik Escobedo
7
I miłą rzeczą Ruby jest to, że zarówno movea mvwięc można wybrać jedn. :)
Željko Filipin
1
Powinno być require "fileutils"(bez kapsli)
Clint Pachl
1

oto szablon.

 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
źródło
-8

możesz przenieść swój plik w ten sposób

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

kajal
źródło
1
To odpowiedź na pytanie „Jak zbudować ścieżkę / nazwę pliku względem katalogu głównego projektu Rails?”. Niczego nie rusza.
Andreas Baumgart