LINUX.ORG.RU

Обработка по правилам, чтобы не изобретать велосипед

 


0

1

Типовая в общем задача, но...

Есть большое файловое хранилище. Его нужно периодически проверять, применяя по очереди ко всем файлам набор правил. Например:

«Файл с расширением FGR может лежать только в каталоге /FGR, кроме случая, когда файл содержит ссылку на файл с расширением DOC, иначе включить флаг „ошибка“

И таких правил куча, периодически они меняются. Наверняка, все сталкивались с аналогичными задачами.

Внимание вопрос :)

Может быть есть готовые инструменты (языки программирования, движки, фреймворки) для решения задач этого класса?

P.S. Работать всё должно под центос или под убунту. Пока делаем всё на php, но навязчивый образ велосипеда на квадратных колёсах доводит до паранойи :)


Что-то сомневаюсь, что есть что-то готовое, я бы накидал по-быстрому на perl, причём напрашивается DSL для описания правил.

DELIRIUM ☆☆☆☆☆
()
Ответ на: DSL от esisl

ахаха, чего-то проиграл. я бы накидал по-быстрому, подойдет свой язык программирования на своей ос.. (если что не шутка и не траленг, ведь решение любой прикладной задачи это свой ДЭ ЭС ЭЛ).

anonymous
()

Такие задачки удобно на ruby решать (ну или python на худой конец)

«Файл с расширением FGR может лежать только в каталоге /FGR, кроме случая, когда файл содержит ссылку на файл с расширением DOC, иначе включить флаг „ошибка“

Самый тупой код будет выглядеть так (не запускал)

files = Dir["/home/user1/dir_to_inspect/**/*"]

files.reject! {|f| 
  !File.directory?(f) and
  File.extname(f) == ".FGR" and
  File.dirname(f).include("/FGR") and
  ...
}

Для каждого правила можно иметь отдельный файл.

anonymous
()
Ответ на: комментарий от anonymous

а еперь прример магического ДСЛ для этого `псевдокод`: ``` files = Dir all_files = files.reject! is_directory = !File.directory is_extension = File.extname is_dirname = method(«includes», partial(File.dirname)) ```

использование:

``` files = «/my/**/*.txt» all_files {|file| is_extension(«txt») OR (is_directory() AND is_dirname(«foo»)) process_file() } ```

anonymous
()
Ответ на: комментарий от anonymous

Предлагаю Drools как более современный вариант.

ya-betmen ★★★★★
()

Какой-то анти-NIH-синдром

dave ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.