2013-06-11 22 views
13

Tôi đang cố gắng kiểm tra nội dung của tệp được tạo từ mã. Vấn đề là tên đầy đủ của tệp dựa trên dấu thời gian abc123_#{d.strftime('%Y%m%d%I%M%S')}.logRuby: Sử dụng cụm từ thông dụng để tìm và mở tệp dựa trên tên tệp của nó?

Tôi có thể sử dụng File để tìm tệp này và đọc nó như thế nào? Tôi đã thử làm File.exists?() với cụm từ thông dụng làm tham số nhưng điều đó không hoạt động.

Tôi thấy điều này trong một câu hỏi khác trên stackoverflow:

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

Làm thế nào tôi sẽ có thể sử dụng trong trường hợp của tôi, nơi các tập tin nằm trong thư mục public của tôi?

ĐÁP

Vì vậy, hai câu trả lời dưới cả hai công việc và tôi đã sử dụng một sự kết hợp của họ.

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

Các * hoạt động như một ký tự đại diện đó là sắp xếp của một biểu thức chính quy của riêng mình. Sau đó bạn lọc mảng bằng cách sử dụng một regex thực tế.

+0

Có thể hơi nhanh hơn để thực hiện 'f.include? ('Purge_cc_website')' vì nó không bao gồm regex. –

Trả lời

20

Dir[] mất một glob tập tin như vậy, nếu mô hình của bạn không phải là quá phức tạp, bạn chỉ có thể làm:

Dir['public/abc123_*.log'] 

Thông tin thêm về glob here.

13

File là để đọc một tệp. Bạn cần sử dụng Dir để tìm tệp theo tên.

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

Nếu bạn chỉ muốn các tập tin cuối cùng trong trường hợp dups:

files = Dir['*'].select {|x| x =~ /_.*(css|scss|sass)/ }.sort.last 
Các vấn đề liên quan