Wie verschiebe ich eine Datei mit Ruby?

173

Ich möchte eine Datei mit Ruby verschieben. Wie mache ich das?

Željko Filipin
quelle

Antworten:

264

Sie können dazu FileUtils verwenden.

#!/usr/bin/env ruby

require 'fileutils'

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

Merken; Wenn Sie sich über Partitionen bewegen, kopiert "mv" die Datei an ein neues Ziel und hebt die Verknüpfung des Quellpfads auf.

Berk D. Demir
quelle
Ich habe vergessen hinzuzufügen, dass Sie sich nicht über Partitionen bewegen können. Vielen Dank.
Željko Filipin
6
Eigentlich macht mv die Kopie für Sie. "Verschiebt Datei (en) src nach Ziel. Wenn Datei und Ziel auf der unterschiedlichen Festplattenpartition vorhanden sind, wird die Datei stattdessen kopiert." ... ruby-doc.org/core/classes/FileUtils.html#M004330
Darkerstar
Können Sie bestätigen, ob die Datei nach dem Kopieren von einer anderen Partition gelöscht wurde?
Knoopx
89

Eine alte Frage, ich bin überrascht, dass niemand diese einfache Lösung beantwortet hat. Sie benötigen weder Fileutils noch einen Systemaufruf. Benennen Sie die Datei einfach an den neuen Speicherort um.

File.rename source_path, target_path

Viel Spaß beim Codieren

Peter
quelle
11
Das Umbenennen von Dateien funktioniert nicht über Partitionen hinweg und löst den Fehler "Ungültige geräteübergreifende Verknüpfung" aus. FileUtils ist in diesen Fällen die bessere Wahl, aber für einen einfachen Umzug in dieselbe Partition funktioniert das Umbenennen.
d3vkit
@ d3vkit, danke für die Bemerkung, aber in Windows funktioniert dies auf allen lokalen und Remote-Laufwerken, z. B. <code> File.rename 'c: /test/test.txt', 'e: /test.txt' </ code>, Welches Betriebssystem verwenden Sie?
Peter
1
Ah, ich hatte Probleme speziell in Ubuntu mit einigen Windows-Netzwerkfreigaben. Am Ende hatte ich auch Probleme mit FileUtils.mv, das die Datei verschob und dann sagte, es hätte keine Berechtigung zum Löschen der alten Datei. Am Ende habe ich FileUtils.cp und dann File.delete verwendet, um die alte Datei zu entfernen.
d3vkit
3
Dies funktioniert definitiv nicht partitionübergreifend unter Linux. Ich denke, es hängt von den zugrunde liegenden Betriebssystem-APIs ab. Um sicher zu sein, verwenden Sie einfach FileUtils.mv.
Akostadinov
1
Beachten Sie, dass Sie in einigen Fällen möglicherweise auf dieselbe Partition beschränken möchten , wie ich es gerade tue, um eine atomare Operation sicherzustellen.
Zorg
16

FileUtils.move

require "FileUtils"
FileUtils.move 'stuff.rb', '/notexist/lib/ruby'
Željko Filipin
quelle
3
+1 Beachten Sie, dass .move ein Alias ​​von .mv ist, sodass Sie auch FileUtils.mv ausführen können sollten.
Tim Knight
1
Danke, ich mag es einfach .mv mehr als .mv. :)
Željko Filipin
1
Ich nicht. mvIch fühle mich wie in meiner geliebten Konsole;)
Erik Escobedo
7
Und das Schöne an Ruby ist, dass es beides hat moveund man sich mveines aussuchen kann. :)
Željko Filipin
1
Sollte sein require "fileutils"(keine Kappen)
Clint Pachl
1

Hier ist eine Vorlage.

 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
quelle
-8

Sie können Ihre Datei so verschieben

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

Kajal
quelle
1
Das ist die Antwort auf die Frage "Wie erstelle ich einen Pfad / Dateinamen relativ zum Stammverzeichnis eines Rails-Projekts?". Es bewegt nichts.
Andreas Baumgart