erweiterungsmöglichkeiten

Das kleine Beispiel enthält noch keine selbst geschriebene Klasse, da dies für ein Skript in dieser Größe noch nicht wirklich not tut. Ein häufiger Anwendungsfall beim Einlesen eines Verzeichnisses ist es, jeden Eintrag zu bearbeiten. Auch dies geht in Ruby sehr leicht:

Dir[' /*'].each { |eintrag|
        puts "Verarbeite Eintrag \"#{eintrag}\"."
}

Möchten Sie dazu Shell-Befehle aufrufen? Dann schauen Sie sich mal die Methode Kernel#system an oder probieren Sie die Backticks aus: puts `free`.

Listing 1

#!/usr/bin/env ruby
# Parser für Shell-Argumente einbinden
require 'optparse'
# Holt ein Verzeichnislisting
def hole_verzeichnis(verz)
    begin
            altesverz = Dir.pwd
            # Verzeichniswechsel, um Verzeichnis ausgehende, relative Pfade zu erhalten
            Dir.chdir(verz)
            # Verzeichnis rekursiv auflisten
            liste=Dir[' /*']
            # Zu altem Verzeichnis zurückwechseln
            Dir.chdir(altesverz)
            # Liste zurückgeben
            return liste
    # Fehler bei der System-Funktion?
    rescue SystemCallError
            # Fehler, so wie er ist, weitergeben
            raise
    end
end
# Vergleicht zwei Listen
# grosskleinegal:
# false = Groß- / Kleinschreibung wird beachtet
# true = Groß- / Kleinschreibung wird nicht beachtet
def vergleiche(liste1, liste2, grosskleinegal)
    if grosskleinegal==true
            return (liste1 - liste2).sort {| a,b | a.downcase <=> b.downcase }
    else
            return (liste1 - liste2).sort
    end
end
# Standardwerte
grosskleinegal=false
# Parser für Optionen einrichten
opts = OptionParser.new do |o|
    o.banner = "Benutzung: dirdiff.rb [optionen] verzeichnis1 verzeichnis2"
    o.separator( "Vergleicht zwei Verzeichnisbäume miteinander." )
    o.separator( "" )
    # Optionen
    o.on("-i", "--ignore-case", "Groß-/Kleinschreibung ignorieren.") do
            grosskleinegal=true
    end
    o.on("-h", "--help", "Hilfe." ) do
            puts o
            exit
    end
end
# Übergebene Argumente auswerten
begin
    opts.parse!( ARGV )
    # Verzeichnisse angegeben?
    verz1 = ARGV[0] or raise( "Verzeichnis 1 fehlt." )
    verz2 = ARGV[1] or raise( "Verzeichnis 2 fehlt." )
rescue => e
    STDERR.puts "Fehler: #{e.message}"
    STDERR.puts opts.to_s
    exit 1
end
# Verzeichnisse einlesen…
begin
    liste1 = hole_verzeichnis(verz1)
    liste2 = hole_verzeichnis(verz2)
rescue SystemCallError => e
    STDERR.puts "Fehler: #{e.message}"
    exit
end
# … und vergleichen
printf "\nDateien, die in #{verz1} jedoch nicht in #{verz2} existieren:\n"
puts vergleiche(liste1, liste2, grosskleinegal)
printf "\nDateien, die in #{verz2} jedoch nicht in #{verz1} existieren:\n"
puts vergleiche(liste2, liste1, grosskleinegal)

Der Autor

Martin Steigerwald arbeitet als Systemadministrator bei der Teamix GmbH in Nürnberg. Ein Schwerpunkt seiner Tätigkeit liegt dabei im Second Level Support für Linux als Business-Desktop. Er hat Linux schon vor Jahren auf seinem Amiga 4000 installiert und verwendet es auch privat auf einem IBM Thinkpad.

Glossar

Exception

Ausnahme oder Ausnahmezustand, meistens ein Fehler. Viele Programmiersprachen bieten via Exception-Handling einen Weg, Informationen über solche Ausnahmezustände an andere Programmebenen weiterzureichen.

Infos

[1] Web-Seite von Ruby: http://www.ruby-lang.org

[2] Programming Ruby: http://www.rubycentral.com/book/

[3] "Programmierung in Ruby – Der Leitfaden der Pragmatischen Programmierer: http://home.vrweb.de/~juergen.katins/ruby/buch/"

[4] Programmieren mit Ruby: http://www.approximity.com/rubybuch2/rb.html

[5] Why's (Poignant) Guide to Ruby: http://poignantguide.net/ruby/

[6] Ruby-Referenz: http://www.rubycentral.com/ref/

[7] Ruby-Schnellreferenz: http://www.zenspider.com/Languages/Ruby/QuickRef.html

[8] Einführung zu OptionParser: http://www.wikidorf.de/reintechnisch/Inhalt/RubyOptParse

[9] RubyGarden Wiki: http://www.rubygarden.org/ruby/

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • The Answer Girl
    Lauter kaputte Links in Webseiten, nur weil bei ihrer Erstellung Groß- und Kleinschreibung unbeachtet blieb? Dieses Problem lässt sich zum Beispiel mit einem Perl-Skript lösen.
  • Mit dem Raspberry Pi eine Wetterstation anzapfen
    Einige Wetterstationen liefern ihre Messdaten per USB an einen angeschlossenen Rechner. Mit dem Raspberry Pi lassen sich so die Daten auswerten und per Web-Anwendung ins Netz stellen.
  • Mit Python programmieren
    Trotz grafischer Oberflächen führt manchmal kein Weg am Einsatz von Skripts vorbei, die regelmäßige Aufgaben individuell lösen. Einsteigern bietet sich dafür die klar strukturierte Sprache Python an.
  • Typische Fehler in Python-Code vermeiden
    Python ist einfach – aber nicht so einfach, dass man es allein durch Lesen von Code lernen könnte. Mit etwas Hintergrundwissen vermeiden Sie typische Fehler in Python-Code und schreiben so bessere Programme.
  • Präsentationen auf der Kommandozeile
    Wenn's für fast jede Anwendung eine Möglichkeit gibt, alternativ auf grafische oder textbasierter Software zurück zu greifen – warum sollte das bei Vorträgen und Präsentationen anders sein?
Kommentare

Infos zur Publikation

LU 11/2017: Server für Daheim

Digitale Ausgabe: Preis € 8,50
(inkl. 19% MwSt.)

LinuxUser erscheint monatlich und kostet 5,95 Euro (mit DVD 8,50 Euro). Weitere Infos zum Heft finden Sie auf der Homepage.

Das Jahresabo kostet ab 86,70 Euro. Details dazu finden Sie im Computec-Shop. Im Probeabo erhalten Sie zudem drei Ausgaben zum reduzierten Preis.

Bei Google Play finden Sie digitale Ausgaben für Tablet & Smartphone.

HINWEIS ZU PAYPAL: Die Zahlung ist ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!

Stellenmarkt

Aktuelle Fragen

Lieber Linux oder Windows- Betriebssystem?
Sina Kaul, 13.10.2017 16:17, 3 Antworten
Hallo, bis jetzt hatte ich immer nur mit
IT-Kurse
Alice Trader, 26.09.2017 11:35, 2 Antworten
Hallo liebe Community, ich brauche Hilfe und bin sehr verzweifelt. Ih bin noch sehr neu in eure...
Backup mit KUP unter Suse 42.3
Horst Schwarz, 24.09.2017 13:16, 3 Antworten
Ich möchte auch wieder unter Suse 42.3 mit Kup meine Backup durchführen. Eine Installationsmöglic...
kein foto, etc. upload möglich, wo liegt mein fehler?
kerstin brums, 17.09.2017 22:08, 5 Antworten
moin, zum erstellen einer einfachen wordpress website kann ich keine fotos uploaden. vom rechne...
Arch Linux Netzwerkkonfigurationen
Franziska Schley, 15.09.2017 18:04, 0 Antworten
Moin liebe Linux community, ich habe momentan Probleme mit der Einstellung des Lan/Wlan in Arc...