Jak przenieść plik za pomocą Rubiego?


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ą.


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


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'

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

-8

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

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


1
To odpowiedź na pytanie „Jak zbudować ścieżkę / nazwę pliku względem katalogu głównego projektu Rails?”. Niczego nie rusza.
Andreas Baumgart
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.