Verwenden von Glob mit Verzeichnissen in Ruby

click fraud protection

"Globbing"Dateien (mit Dir.glob) In Ruby können Sie nur die gewünschten Dateien auswählen, z. B. alle XML-Dateien in einem bestimmten Verzeichnis. Obwohl Dir.blog ist mögen reguläre Ausdrücke ist es nicht. Es ist sehr begrenzt im Vergleich zu Rubin's reguläre Ausdrücke und ist enger mit Shell-Erweiterungs-Platzhaltern verwandt.

Das Gegenteil von Globbing, bei dem alle Dateien in einem Verzeichnis durchlaufen werden, kann mit dem ausgeführt werden Dir.foreach Methode.

Beispiel

Der folgende Glob stimmt mit allen Dateien überein, die auf enden .rb in dem Aktuelles Verzeichnis. Es wird ein einzelner Platzhalter verwendet, das Sternchen. Das Sternchen entspricht null oder mehr Zeichen, sodass jede Datei mit endet .rb wird mit diesem Glob übereinstimmen, einschließlich einer Datei, die einfach aufgerufen wird .rb, mit nichts vor der Dateierweiterung und ihrer vorhergehenden Periode. Die glob-Methode gibt alle Dateien, die den globbing-Regeln entsprechen, als Array zurück, das zur späteren Verwendung gespeichert oder wiederholt werden kann.

instagram viewer
 #! / usr / bin / env ruby


 Dir.glob ('*. Rb'). Jeder do | f |

 setzt f

 Ende

Platzhalter und mehr

Es gibt nur wenige Platzhalter zu lernen:

  • * - Entspricht null oder mehr Zeichen. Ein Glob, der nur aus dem Sternchen und keinen anderen Zeichen oder Platzhaltern besteht, stimmt mit allen Dateien im aktuellen Verzeichnis überein. Das Sternchen wird normalerweise mit einer Dateierweiterung kombiniert, wenn nicht mehr Zeichen, um die Suche einzugrenzen.
  • ** - Alle Verzeichnisse rekursiv abgleichen. Dies wird verwendet, um in den Verzeichnisbaum abzusteigen und alle Dateien in Unterverzeichnissen des aktuellen Verzeichnisses zu finden, anstatt nur Dateien im aktuellen Verzeichnis. Dieser Platzhalter wird im folgenden Beispielcode erläutert.
  • ? - Entspricht einem beliebigen Zeichen. Dies ist nützlich, um Dateien zu finden, deren Name in einem bestimmten Format vorliegt. Zum Beispiel könnten 5 Zeichen und eine XML-Erweiterung ausgedrückt werden als ... xml.
  • [a-z] - Entspricht einem beliebigen Zeichen im Zeichensatz. Der Satz kann entweder eine Liste von Zeichen oder ein durch das Bindestrichzeichen getrennter Bereich sein. Zeichensätze folgen der gleichen Syntax wie Zeichensätze in regulären Ausdrücken und verhalten sich genauso.
  • {a, b} - Übereinstimmungsmuster a oder b. Dies sieht zwar wie ein Quantifizierer für reguläre Ausdrücke aus, ist es aber nicht. Zum Beispiel im regulären Ausdruck das Muster a {1,2} entspricht 1 oder 2 'a' Zeichen. Beim Globbing stimmt es mit der Zeichenfolge überein a1 oder a2. Andere Muster können innerhalb dieses Konstrukts verschachtelt werden.

Eine Sache zu berücksichtigen ist Groß- und Kleinschreibung beachten. Es ist Sache des Betriebssystems, zu bestimmen, ob TEST.txt und Prüfung. TXT beziehen sich auf die gleiche Datei. Unter Linux und anderen Systemen sind dies unterschiedliche Dateien. Unter Windows beziehen sich diese auf dieselbe Datei.

Das Betriebssystem ist auch für die Reihenfolge verantwortlich, in der die Ergebnisse angezeigt werden. Es kann sich unterscheiden, wenn Sie Windows oder Windows verwenden Linux, zum Beispiel.

Eine letzte Sache zu beachten ist die Dir [Globstring] Bequemlichkeitsmethode. Dies ist funktional das gleiche wie Dir.glob (Globstring) und ist auch semantisch korrekt (Sie indizieren ein Verzeichnis, ähnlich wie ein Array). Aus diesem Grund können Sie sehen Dir [] häufiger als Dir.glob, aber sie sind das gleiche.

Beispiele für Platzhalter

Das folgende Beispielprogramm zeigt so viele Muster wie möglich in vielen verschiedenen Kombinationen.

 #! / usr / bin / env ruby


 # Holen Sie sich alle XML-Dateien

 Dir ['*. Xml']


 # Holen Sie sich alle Dateien mit 5 Zeichen und einer .jpg-Erweiterung

 Dir ['... jpg']


 # Holen Sie sich alle JPG-, PNG- und GIF-Bilder

 Dir ['*. {Jpg, png, gif}']


 # Steigen Sie in den Verzeichnisbaum ab und erhalten Sie alle JPG-Bilder

 # Hinweis: Dadurch werden auch JPG-Bilder im aktuellen Verzeichnis abgelegt

 Dir ['** / *. Jpg']


 # Steigen Sie ab Uni in alle Verzeichnisse ab und finden Sie alle

 # JPG-Bilder.

 # Hinweis: Dies führt nur zu einem Verzeichnis

 Dir ['Uni ** / *. Jpg']


 # Steigen Sie in alle Verzeichnisse ab, beginnend mit Uni und allen

 # Unterverzeichnisse von Verzeichnissen, die mit Uni beginnen und suchen

 # alle .jpg Bilder

 Dir ['Uni ** / ** / *. Jpg']

instagram story viewer