· 2 min read

Scripttip: Datei- und Verzeichnis-Operationen mit Ruby

Im ersten Beispiel erstellen wir eine Datei. Sie wird dort angelegt von wo das Script ausgeführt wird.

Eine einfach Text-Datei erstellen: [ruby] datei = ‘datei.txt’ File.open(datei, ‘w’) {|d| d.write ‘Text für die neue Datei’} [/ruby]

Soll die Datei an einem bestimmten Ort/Pfad erstellt werden, müssen ggf. die entsprechenden Verzeichnisse erst angelegt werden. Dazu kann die “mkdir_p” Methode aus FileUtils benutzt werden, weil diese sicherstellt, dass alle benötigten Ordner im Pfad angelegt werden.

[ruby] require ‘fileutils’

datei = ‘/tmp/mein/pfad/zur/datei.txt’ FileUtils.mkdir_p File.dirname(datei) File.open(datei, ‘w’) do |d| d.write ‘Beispieltext für die neu erzeugte Datei’ end [/ruby]

Soll die Original-Datei unverändert bleiben, kann eine Kopie erzeugt werden um die Manipulationen an dieser vorzunehmen. [ruby] require ‘fileutils’

FileUtils.copy(‘datei.txt’, ‘kopie.txt’) [/ruby]

Auch das Verschieben einer Datei ist auch sehr einfach mit FileUtils.

[ruby] require ‘fileutils’

alter_pfad = “/der/alte/pfad/zur/datei.txt” neuer_pfad = “/der/neue/ort/der/datei.txt” # ggf. die benötigten Verzeichnisse erstellen FileUtils.mkdir_p File.dirname(neuer_pfad)

FileUtils.mv(‘/der/alte/pfad/zur’, ‘/opt/new/location/your_file’) [/ruby]

Dies ist nur ein kleiner Auszug aus den Möglichkeiten die FileUtils bietet. Eine Liste weiterer Methoden sind in den RubyDocs verfügbar. Neugierige können sich in der irb-Konsole einen Auszug der Methoden geben lassen. Die meisten Funktions-Namen sind an die Unix-Kommandos angelehnt und in der Regel selbstsprechend. [ruby] irb(main):001:0> require ‘PP’ => true irb(main):001:0> require ‘fileutils’ => true

irb(main):007:0> pp FileUtils.singleton_methods.sort [“cd”, “chdir”, “chmod”, “chmod_R”, “chown”, “chown_R”, “cmp”, “collect_method”, “commands”, “compare_file”, “compare_stream”, “copy”, “copy_entry”, “copy_file”, “copy_stream”, “cp”, “cp_r”, “getwd”, “have_option?”, “identical?”, “install”, “link”, “ln”, “ln_s”, “ln_sf”, “makedirs”, “mkdir”, “mkdir_p”, “mkpath”, “move”, “mv”, “options”, “options_of”, “private_module_function”, “pwd”, “remove”, “remove_dir”, “remove_entry”, “remove_entry_secure”, “remove_file”, “rm”, “rm_f”, “rm_r”, “rm_rf”, “rmdir”, “rmtree”, “safe_unlink”, “symlink”, “touch”, “uptodate?“] => nil [/ruby]

Bevor wir diesen Scripttip abschließen, noch ein kleiner Tip zu temporären Dateien. Häufig wird eine Datei nur zum “zwischenlagern” benötigt. Das heißt die Datei wird spätestens nach der Asführung des Scripts nicht mehr benötigt. Solche Dateien selber anzulegen, erfordert gleichzeitig, dass sie selber gelöscht werden (Aufräumscript, Cron, etc.). Weiterhin kann es zu Namenskollisionen kommen, wenn eine Datei mit dem gleichen Namen vorhanden, usw. All diese Arbeit wird in Ruby von “Tempfile” abgenommen und sollte für diese Zwecke eingesetzt werden.

[ruby] require ‘tempfile’

temp_datei = Tempfile.new(‘temporaere_datei.txt’) temp_datei << “Daten zum Zwischenlagern” temp_datei.close [/ruby]

temp_datei.close wird zwar bei Script-Ende automatisch ausgeführt, aber auf diese Weise behält man die Kontrolle.

Wir hoffen der Scripttip hilft euch bei euren zukünftigen Datei-Operationen.

Back to Blog