2013-06-11 5 views
13

Ich versuche, den Inhalt einer Datei zu testen, die aus Code generiert wird. Das Problem ist, dass der vollständige Name der Datei auf einem Zeitstempel basiert abc123_#{d.strftime('%Y%m%d%I%M%S')}.logRuby: Verwenden eines regulären Ausdrucks zum Suchen und Öffnen einer Datei basierend auf ihrem Dateinamen?

Wie könnte ich File verwenden, um diese Datei zu finden und zu lesen? Ich habe versucht, File.exists?() mit einem regulären Ausdruck als Parameter, aber das hat nicht funktioniert.

Ich fand diese in einer anderen Frage auf Stackoverflow:

File.basename(file_path).match(/_.*(css|scss|sass)/)

Wie würde ich in der Lage sein, dass in meinem Fall zu verwenden, in dem die Datei in meinem public Ordner befindet?

ANTWORT

So sind die beiden Antworten unter der Arbeit und habe ich eine Kombination von ihnen.

Dir['public/*.log'].select { |f| f =~ /purge_cc_website/}

Die * dient als Platzhalter, die sich in Art eines regulären Ausdrucks ist. Danach filtern Sie das Array mit einer tatsächlichen Regex.

+0

Es könnte etwas schneller sein, 'f.include? ('Purge_cc_website')' zu machen, da es keine Regex enthält. –

Antwort

20

Dir[] eine glob so Datei nimmt, wenn Ihr Muster nicht zu kompliziert ist, können Sie einfach tun:

Dir['public/abc123_*.log'] 

Mehr Glob Info here.

13

File ist zum Lesen einer Datei. Sie müssen Dir verwenden, um Dateien nach Namen zu suchen.

files = Dir['*'].select {|x| x =~ /_.*(css|scss|sass)/ } 

Wenn Sie nur die letzte Datei im Fall von dups:

files = Dir['*'].select {|x| x =~ /_.*(css|scss|sass)/ }.sort.last 
Verwandte Themen