2012-12-21 27 views
5

Tôi đang làm việc để chuyển đổi tập lệnh KornShell (ksh) thành Groovy. Tôi có lệnh Find sau đây - một cách Groovy để làm một cái gì đó tương tự, mà không dựa vào các lệnh Unix (tôi cần điều này để làm việc đa nền tảng, vì vậy tôi không thể làm một "blah blah" .execute()).Lệnh Unix FIND trong Groovy

find <source directory> -name <file pattern> -type f -mtime +140 -level 0 

Mã này tìm kiếm tất cả các tệp trong thư mục nguồn (không có subdir) khớp với mẫu tệp và lớn hơn 140 ngày.

Trả lời

6

Groovy cung cấp một số phương pháp để tìm kiếm thông qua các thư mục: File.eachFile cho trường hợp -level 0 hoặc File.eachFileRecurse cho trường hợp chung. Ví dụ:

use(groovy.time.TimeCategory) { 
    new File(".").eachFile { file -> 
     if (file.isFile() && 
      file.lastModified() < (new Date() - 140.days).time) { 
      println file 
     } 
    } 
} 
+2

hoặc nếu bạn đang thực hiện mức 0, bạn có thể làm File.listFiles() và làm theo điều đó với FindAll để chỉ nhận được các tập tin cũ vào một bộ sưu tập –

+1

Người hỏi cũng muốn để phù hợp với tên chống lại một mô hình cần sử dụng eachFileMatch() chẳng hạn như tệp mới ('.'). eachFileMatch (~ /.*? \. JPG /) {... – JasonM1