Utilizzo di Glob con le directory

File "Globbing" (con Dir.glob) in Ruby ti consente di selezionare solo i file desiderati, come tutti i file XML, in una determinata directory. Nonostante Dir.blog è piace espressioni regolari, non lo è. È molto limitato rispetto alle espressioni regolari di Ruby ed è più strettamente correlato ai caratteri jolly di espansione della shell.

L'opposto del globbing, che scorre su tutti i file in una directory, può essere fatto con Dir.foreach metodo.

Esempio

Il seguente glob corrisponderà a tutti i file che terminano con .rb nella directory corrente. Utilizza un solo carattere jolly, l'asterisco. L'asterisco corrisponderà a zero o più caratteri, quindi qualsiasi file che termina con .rb corrisponderà a questo glob, incluso un file chiamato semplicemente .rb, con nulla prima dell'estensione del file e del suo periodo precedente. Il metodo glob restituirà tutti i file che corrispondono alle regole globbing come un array, che possono essere salvati per un uso successivo o ripetuti.

 #! / usr / bin / env ruby

 

 Dir.glob ('*. Rb'). Ognuno fa | f |

 mette f

 fine

Caratteri jolly e altro

Ci sono solo alcuni caratteri jolly da imparare:

  • * - Abbina zero o più caratteri. Un glob composto solo da asterisco e nessun altro carattere o carattere jolly corrisponderà a tutti i file nella directory corrente. L'asterisco di solito è combinato con un'estensione di file se non più caratteri per restringere la ricerca.
  • ** - Abbina ricorsivamente tutte le directory. Viene utilizzato per scendere nella struttura della directory e trovare tutti i file nelle sottodirectory della directory corrente, anziché solo i file nella directory corrente. Questo carattere jolly viene esplorato nel seguente codice di esempio.
  • ? - Abbina qualsiasi personaggio. Questo è utile per trovare file il cui nome è in un formato particolare. Ad esempio, 5 caratteri e un'estensione .xml potrebbero essere espressi come ?????.xml.
  • [A-z] - Abbina qualsiasi personaggio nel set di caratteri. Il set può essere un elenco di caratteri o un intervallo separato dal carattere trattino. I set di caratteri seguono la stessa sintassi e si comportano allo stesso modo dei set di caratteri nelle espressioni regolari.
  • A, b - Schema di corrispondenza a o b. Anche se questo sembra un quantificatore di espressioni regolari, non lo è. Ad esempio, nell'espressione regolare, il modello a 1,2 corrisponderà a 1 o 2 caratteri "a". In globbing, corrisponderà alla stringa a1 o a2. Altri schemi possono essere nidificati all'interno di questo costrutto.

Una cosa da considerare è la distinzione tra maiuscole e minuscole. Sta al sistema operativo determinare se tEST.TXT e tEST.TXT fare riferimento allo stesso file. Su Linux e altri sistemi, si tratta di file diversi. Su Windows, questi faranno riferimento allo stesso file.

Il sistema operativo è anche responsabile dell'ordine in cui vengono visualizzati i risultati. Ad esempio, potrebbe essere diverso su Windows rispetto a Linux.

Un'ultima cosa da notare è il Dir [globstring] metodo di convenienza. Funzionalmente è uguale a Dir.glob (globstring) ed è anche semanticamente corretto (stai indicizzando una directory, proprio come un array). Per questo motivo, potresti vedere Dir [] più spesso di Dir.glob, ma sono la stessa cosa.

Esempi con i caratteri jolly

Il seguente programma di esempio mostrerà quanti più schemi possibile in molte combinazioni diverse.

 #! / usr / bin / env ruby

 

 # Ottieni tutti i file .xml

 Dir [ '*. Xml']

 

 # Ottieni tutti i file con 5 caratteri e un'estensione .jpg

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

 

 # Ottieni tutte le immagini jpg, png e gif

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

 

 # Scendi nell'albero delle directory e ottieni tutte le immagini jpg

 # Nota: questo archivierà anche le immagini jpg nella directory corrente

 Dir [ '** / *. Jpg']

 

 # Scendi in tutte le directory che iniziano con Uni e trova tutto

 # immagini jpg.

 # Nota: questo scende solo in una directory

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

 

 # Discendi in tutte le directory che iniziano con Uni e tutti

 # sottodirectory delle directory che iniziano con Uni e find

 # tutte le immagini .jpg

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