Печать папок с определенным расширением файла в Groovy - PullRequest
1 голос
/ 20 октября 2019

Я хочу найти все папки, содержащие файлы определенного расширения в groovy. Я знаю, как это сделать в Bash. Я бы использовал что-то вроде

find /folder-type f -name "*.png" -printf "%h"

Но как бы я сделал это в Groovy?
Так что, если структура папок

Folder
|-X
  |- pic1.png
  |- Y
     |-pic2.png
  |-Z
    |-A
    |-B
      |-pic3.png

В этом случаемой желаемый вывод X, X / Y, X / Z / B. Также я хотел бы хранить их как строки, разделенные пробелами, следовательно, что-то вроде name = XX / YX / Z / B.

Я хотел бы сделать что-то вроде получения всех файлов и папок

def list = []
def dir = new File("path/to/folder/")
dir.eachFileRecurse (FileType.FILES) { file ->
   list << file
}

, но мне нужен путь к папкам, содержащим файлы с определенным расширением.

Ответы [ 2 ]

1 голос
/ 20 октября 2019
import groovy.io.FileVisitResult
import groovy.io.FileType

def list=[]

new File('path/to/folder/').traverse(
    type         : FileType.FILES,
    nameFilter   : ~/.*\.png$/,   //ends with png
){f-> 
    list << f.parentFile          //add parent dir to list
    FileVisitResult.SKIP_SIBLINGS //don't continue dir scan on one file found
}

документация для File.traverse (Карта, Закрытие) метод

0 голосов
/ 20 октября 2019

Получите «родительскую» (папку) каждого файла и измените Список на Набор для устранения дубликатов:

def list = new LinkedHashSet()
def dir = new File("C:/prog/utility")
dir.eachFileRecurse (groovy.io.FileType.FILES) { file ->
   list << file.parentFile
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...