LINUX.ORG.RU
ФорумAdmin

Поиск закономерностей в выводе find

 , ,


0

3

Есть текстовый файл, примерно 27 мегабайт. В нём - список файлов, которые по-хорошему надо бы засунуть в logrotate. Помимо имён файлов там ещё их возраст в днях и размер.

Генерирует его скрипт на Ruby, а формат - просто puts Hash.inspect, так что я могу добавить информации, или например разбить путь к файлу и представить его в виде массива.

И вот вопрос. Есть ли какие-то подходы к поиску закономерностей в списках файлов? В идеале - какой-нибудь модуль, который бы такой список схавал и выплюнул несколько глобов, которые бы покрывали скажем процентов пятьдесят списка. Или как такое правильно по науке называется (inb4 онанизм), чтобы я мог загуглить?

★★★★★

Последнее исправление: Hoodoo (всего исправлений: 1)

не совсем понял задачу, парсить файл и засовывать подходящие под условия файлы в logrotate?

Наверное можно что-то наколбасить с помощью awk-а, не спец по нему, лично мне было бы проще работать с этим списком файлов непосредственно в ruby - ИМХО, там удобнее сортировать, фильтровать и дробить Хэши как душа пожелает =)

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

Засовывать автоматически не нужно. Подходящие под условия - тоже не совсем так.

Просто есть список путей, нужно предложить несколько глобов, под которые попало бы как можно больше файлов. Под условия я сам бы сделал, а тут думать надо.

Конечно же я предпочёл бы работать именно с Ruby, но это не принципиально, если под другой язык есть удобная библиотека для чего-то такого, это тоже хорошо.

Hoodoo ★★★★★
() автор топика
Ответ на: комментарий от strangeman

Допустим, пока я был в отпуске, у нас появилась в /tmp/${user} директория tonsofshit, в которую за две недели успели понаписать двести тысяч файликов. А юзеров например сто.

И вот я хочу прийти из отпуска, прогнать свой скрипт, и чтобы он мне молвил человеческим голосом:

/tmp/*/tonsofshit/*log - 200 000

Как-то так.

Hoodoo ★★★★★
() автор топика
Ответ на: комментарий от Hoodoo

Я бы на bash и AWK это делал (Ruby не знаю, но bash тут удобен, когда возможностей AWK мало), а вообще условия зависимостей непонятны.

peregrine ★★★★★
()
Ответ на: комментарий от Hoodoo

Если я верно понял задачу, то на Руби это будет как-то так:

require 'find'

init_dir = ARGV[0]
search_regexp = ARGV[1]

Find.find(init_dir) { |f| puts f if f =~ /#{search_regexp}/ }

Варианты вызова:

$ ruby find_files.rb /tmp/ /.*?/tonsofshit/.*?\.log$
/tmp/2/tonsofshit/3.log
/tmp/3/tonsofshit/1.log
/tmp/3/tonsofshit/2.log
$ ruby find_files.rb /tmp/ /.*?/tonsofshit/.*?\.log$ | wc -l
3

WhiteWolf
()
Последнее исправление: WhiteWolf (всего исправлений: 4)
Ответ на: комментарий от WhiteWolf

Не, я наверное плохо объяснил.

То, что ты показываешь - это про _сбор_ данных, а собрать я их уже собрал:

https://github.com/Hoodoo/worstpractices/blob/master/scripts/lr-eval.rb (КГ/АМ)

Мне бы теперь их обработать. Взять файл, загрузить из него данные и получить подсказку, чего бы мне ещё заротировать.

Hoodoo ★★★★★
() автор топика
Ответ на: комментарий от Hoodoo

я наверное плохо объяснил

ты слишком мягок с собой, это до добра не доведёт.
Опиши нормально сценарий, с примерами входных и выходных данных

zolden ★★★★★
()
Ответ на: комментарий от Hoodoo

Не очень вчитывался в скрипт, но на первый взгляд (и по твоим словам) он корректно находит файлы по agelimit и sizelimit, и запихивает их в Хэш.

Не совсем понимаю, что мешает грепать/иттерировать этот хэш и выводить нужные тебе подсказки прям из этого скрипта?

Вообщем, задача по прежнему непонятна =))

WhiteWolf
()
Последнее исправление: WhiteWolf (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.