Funktionen

Nun geht es endlich daran, die beiden Verzeichnisse einzulesen (ab Zeile 75). Dazu dient die selbst definierte Funktion hole_verzeichnis ab Zeile 5, die das Skript für jedes Verzeichnis aufruft.

Das rekursive Einlesen eines Verzeichnisses ist in der Klasse Dir bereits fertig implementiert. Das Muster ** steht dabei für alle Unterverzeichnisse eines Verzeichnisses. Tippen in irb einfach Dir['/beliebiges/verzeichnis/**/*'] ein, um das auszuprobieren: Heraus kommt ein Array mit allen Einträgen.

Die Funktion macht daher nichts weiter, als in das angegebene Verzeichnis zu wechseln (Zeile 11), eine Liste aller Dateien und Verzeichnisse anzufordern (Zeile 14), wieder in das alte Verzeichnis zu springen, und die Liste mit den Dateien zurückzugeben (Zeile 20). Das Wechseln des Verzeichnisses ist dabei nötig, um relative Pfadnamen zu erhalten, die sich ohne weitere Vorkehrungen miteinander vergleichen lassen.

Die Funktion zeigt, das auch verschachtelte Strukturen das Behandeln der Fehler nicht behindern. Sie gibt einen entstandenen Fehler mittels raise ohne Argumente (Zeile 24) einfach an die aufrufende Ebene weiter, welche sie ab Zeile 78 entsprechend behandelt. Das Skript fängt diesmal nur den SystemCallError ab, bei Syntaxfehlern steigt Ruby an Ort und Stelle aus.

Sortieren und ausgeben

Bleibt nur noch, die Arrays mit den Listen der Verzeichnisse miteinander zu vergleichen. Nichts einfacher als das: Es genügt, das Quell-Array von dem Ziel-Array abzuziehen, um alle Einträge zu finden, die das Ziel-Array nicht enthält. Dies erledigt eine eigene Funktion ab Zeile 28. Diese sortiert das Ergebnis gleich noch. Dazu bietet die Klasse Array bereits eine passende Methode an, die Sie einfach aufrufen (Zeile 36).

Standardmäßig unterscheidet Ruby beim Sortieren zwischen Groß- und Kleinschreibung. Zeile 34 implementiert einen Vergleich ohne entsprechende Differenzierung. Dazu wandelt der Block {| a,b | a.downcase <=> b.downcase } alle Einträge vor dem Sortieren in Kleinbuchstaben um. Bei Bedarf lassen sich hier auch andere Kriterien angeben: So sortiert der Block { |a, b| File::mtime(a) <\<>=<\>> File::mtime(b) } die Ergebnisse nach dem Zeitpunkt der letzten Dateiänderung.

Am Ende ab Zeile 84 gibt das Skript das Ergebnis des Vergleichs aus. Dabei kommt eine Besonderheit von Ruby zum Einsatz: In jede Zeichenkette, die mit doppelten Anführungszeichen umgeben ist, lassen sich mit #{ und } beliebige Ausdrücke einbetten. Alternativ geben Sie bei printf die einzelnen Argumente durch Kommas getrennt an.

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