Я инженер по аппаратному обеспечению, работающий в отделе проектирования, и мы регулярно создаем каталоги с большими объемами данных (как большие файлы, так и каталоги, которые содержат большое количество маленьких файлов).Эти данные могут долго зависать на диске, и я ищу метрику, которая идентифицирует каталоги с большими объемами старых данных в качестве кандидатов на удаление.
Метрика, которую я выбрал, - это Размер файла(в M) * Возраст файла (в днях).
У меня есть рабочее решение, но оно представляет собой комбинацию сценариев оболочки и c и не является ни обслуживаемым, ни красивым, ни элегантным.
IЯ ищу идеи для улучшения сценария.
Основная идея состоит в том, чтобы сгенерировать необработанные данные по всем файлам, используя find
find $Dir -type f -exec stat -c "%s,%Y,%n" {} \; > rpt3
, а затем обработать этот файл в C, чтобы получить файл (rpt3b) в формате
Метрика, Возраст, Размер, Имя файла
Метрика - Возраст * Размер
Возраст - это количество дней с момента изменения файла
Размер - это размер файла в M
FileName - это имя файла.
Затем я обрабатываю этот файл для суммирования метрик для каждого каталога
for Directory in $( find /projects/solaris/implementation -maxdepth 4 -type d ) ; do
Total=`grep $Directory/ rpt3a | sed -e 's?,.*??' | paste -sd+ - | bc`
echo $Total,$Directory >> rpt3c
done
Таким образом, выводпохож на ду, но это показатель, который сообщается, а неразмер, взятый на диске.
Я мог бы сделать последний шаг в программе на C, но я ищу решение, которое идеально работает в одной среде (необязательно C, я открыт для изученияновые языки).
Заранее спасибо