2013-06-11 9 views
13

コードから生成されたファイルの内容をテストしようとしています。問題はファイルのフルネームがタイムスタンプに基づいていることですabc123_#{d.strftime('%Y%m%d%I%M%S')}.logRuby:正規表現を使用して、ファイル名に基づいてファイルを検索して開きますか?

Fileこのファイルを見つけて読み取るにはどうすればよいですか?私はFile.exists?()の正規表現をパラメータとして使ってみましたが、うまくいきませんでした。

私はstackoverflowの上の別の質問でこれを見つけた:

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

どのように私は、ファイルが私のpublicのフォルダにあります。私の場合、それを使用することができるだろうか?

ANSWER

だから、仕事と私の両方の下の2つの答えは、それらの組み合わせを使用していました。

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

自体で正規表現の一種であるワイルドカードとして*働きます。その後、実際の正規表現を使用して配列をフィルタリングします。

+0

'f.include?( 'purge_cc_website')'には正規表現が含まれていないので少し速くなるかもしれません。 –

答えて

20

Dir[]はあなただけで行うことができます、ので、ファイルグロブを取ります

Dir['public/abc123_*.log'] 

詳細glob情報here

13

Fileは、1つのファイルを読み込みます。ファイルを名前で検索するには、Dirを使用する必要があります。

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

あなただけのアップデートパッケージの場合、最後のファイルが必要な場合:あなたのパターンがあまりにも複雑ではない場合

files = Dir['*'].select {|x| x =~ /_.*(css|scss|sass)/ }.sort.last 
関連する問題