Glob mit Verzeichnissen verwenden

"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 gibt es nicht. Es ist im Vergleich zu Rubys regulären Ausdrücken sehr begrenzt und steht in enger Beziehung zu Shell-Erweiterungs-Wildcards.

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

Beispiel

Der folgende Glob passt zu allen Dateien, die auf enden .rb im aktuellen Verzeichnis. Es wird ein einzelner Platzhalter verwendet, der Stern. Das Sternchen stimmt mit keinem oder mehreren Zeichen überein, sodass jede Datei auf endet .rb wird mit diesem Glob übereinstimmen, einschließlich einer Datei mit dem Namen simply .rb, mit nichts vor der Dateierweiterung und der vorhergehenden Periode. Die glob-Methode gibt alle Dateien, die den Globbing-Regeln entsprechen, als Array zurück, das zur späteren Verwendung gespeichert oder durchlaufen werden kann.

 #! / usr / bin / env ruby

 

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

 setzt f

 Ende

Wildcards und mehr

Es gibt nur wenige Wildcards zu lernen:

  • * - Entspricht keinem oder mehreren Zeichen. Ein Globus, 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 vorhanden sind, um die Suche einzugrenzen.
  • ** - Ordnen Sie alle Verzeichnisse rekursiv zu. 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 untersucht.
  • ? - Finde ein beliebiges Zeichen. Dies ist nützlich, um Dateien zu finden, deren Namen in einem bestimmten Format vorliegen. Zum Beispiel könnten 5 Zeichen und eine .xml-Erweiterung als ausgedrückt werden ?????.xml.
  • [a-z] - Entspricht einem beliebigen Zeichen im Zeichensatz. Der Satz kann entweder eine Liste von Zeichen oder ein durch den Bindestrich getrennter Bereich sein. Zeichensätze folgen der gleichen Syntax wie und verhalten sich genauso wie Zeichensätze in regulären Ausdrücken.
  • a, b - Muster a oder b abgleichen. 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 passt auf 1 oder 2 'a' Zeichen. Beim Globbing wird es mit der Zeichenfolge übereinstimmen a1 oder a2. Innerhalb dieses Konstrukts können andere Muster verschachtelt werden.

Eine Sache zu berücksichtigen ist die Groß- und Kleinschreibung. Es liegt am Betriebssystem, zu entscheiden, ob TEST.txt und TeSt.TxT Verweisen Sie auf dieselbe 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 beispielsweise unterscheiden, ob Sie Windows oder Linux verwenden.

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 die Verwendung von Platzhaltern

Das folgende Beispielprogramm demonstriert 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 der Erweiterung .jpg

 Dir ['?????. Jpg']

 

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

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

 

 # Gehen Sie in den Verzeichnisbaum und holen Sie sich alle JPG-Bilder

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

 Dir ['** / *. Jpg']

 

 # Steige in alle Verzeichnisse ab, die mit Uni beginnen, und finde alle

 # jpg Bilder.

 # Hinweis: Hiermit wird nur ein Verzeichnis heruntergefahren

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

 

 # In alle Verzeichnisse absteigen, die mit Uni und allen beginnen

 # Unterverzeichnisse von Verzeichnissen, die mit Uni und find beginnen

 # all .jpg images

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