Кабинет
1. Практически резюме
2. Quest игры
3. Joomla!
  · Joomla! LocalLinker
4. Мои работы
  · Low-traffic KharkovForum.com
  · Краситель таблиц
  · Http-лог Eserv
  · Спам-фильтр под Eserv
  · Удаление архивов видеонаблюдения
  · Конвертор расходных документов
  · Перевод LJ moods
  · Логотипы IDO group
  · Переводчик транслита
  · Переводчик дат
5. HTML в BBC
6. Это я люблю (± 100)
7. Страница памяти
Последние новости
 17.05.10 Вернулись из путешествия по Средней Азии! Киргизстан (Бишкек, Ош, Иссык-Куль) - Узбекистан (Ташкент, Хива, Бухара, Самарканд) - Та... »»
Поиск

Вид из окна
д.Сапроново
Быстрый переход
папины дочки играть скачать бесплатно
Полезно
Достопримечательности Украины Система Orphus
Статистика
Rambler's Top100
      Прихожая    Гостиная    Кабинет    Библиотека    Детская    Выход
Удаление архивных файлов  

<!-- о скрипте -->

Данный скрипт создан для удаления архивных файлов системы видеонаблюдения. Он получает в качестве входных параметров папку для сканирования и максимальное кол-во дней жизни файла.


ТЗ:

Каждый день система видеонаблюдения записывает на винчестер компьютера кадры от камер.
Структура папок такая:
...
|-2003_03_09
|    |--1
|    |  |-- куча файлов
|    |--2
|    |  |-- куча файлов
|    |--3
|    |  |-- куча файлов
|    |--4
|    |  |-- куча файлов
|    |--5
|    |  |-- куча файлов
|    |--6
|    |  |-- куча файлов
|    |--7
|    |  |-- куча файлов
|    |--8
|       |-- куча файлов
|
|-2003_03_10
|    |--1
|    |  |-- куча файлов
|    |--2
|    |  |-- куча файлов
|    |--3
|    |  |-- куча файлов
|    |--4
|    |  |-- куча файлов
|    |--5
|    |  |-- куча файлов
|    |--6
|    |  |-- куча файлов
|    |--7
|    |  |-- куча файлов
|    |--8
|       |-- куча файлов
|
|-2003_03_11
...

Объем этих файлов такой, что за 10-12 дней они заваливают 60Гб винт, после чего комп естественно начинает глючить. Пришлось написать этот скрипт...

Суть работы:
    Этот скрипт удаляет файлы на винчестере! Будьте осторожны в использовании!
  1. При запуске скрипт сканирует указанную директорию ($dirnow) и ее поддиректории вида YYYY_MM_DD.
  2. Скрипт заходит в каждую поддиректорию.
  3. Если дата создания поддриектории отличается от текущей даты более чем на ХХ дней ($days), он заходит в эту директорию и удаляет в ней ВСЕ файлы.
  4. После удаления всех файлов директории, скрипт удаляет саму диреторию тоже.
  5. После удаления всех поддиреторий, скрипт удаляет и содержащую их директорию.
  6. Имена всех удаленных файлов и директорий пишутся в лог-файл с именем DDMMYYYY.txt в директории запуска скрипта. Скрипт не рекурсивный. Он расчитал на 3 уровня вложенности!

Исходный код:
#!/usr/bin/perl

use Time::Local;
use File::Path;

$dirnow="e:/events/";
$days=10;
$i=$k=$j=0;
$now=scalar(localtime); &SplitTime($now); $d_id=$now{"day_now"}; if ($d_id < 10) {$d_id = "0$d_id";}; $m_id_num=&GetMonthEnNumber($now{"month_now"}); $path=$d_id.$m_id_num.$now{"year_now"}; $suf=".txt"; open (FILE,">>$path$suf") || die "Can not create file: \n $! \nand\n $^E"; opendir (DIR, $dirnow) || die "couldn't open $dirnow : $!\n"; while ( defined ($file[$i]=readdir DIR)) { next if $file[$i]=~ /^\.\.?$/; ($yyyy,$mm,$dd)=split('_',$file[$i]); $mm=~ s/^0//; $dd=~ s/^0//; if ($dd) { $foldtime = timelocal (0,0,0,$dd,$mm-1,$yyyy-1900); $t=(time-$foldtime)/86400; if ($t>$days) { opendir (DIR2, "$dirnow$file[$i]/") || die "couldn't open $dirnow$file[$i] : $!\n"; while ( defined ($file2[$k]=readdir DIR2)) { next if $file2[$k]=~ /^\.\.?$/; opendir (DIR3, "$dirnow$file[$i]/$file2[$k]/") || die "couldn't open $dirnow$file[$i]/$file2[$k] : $!\n"; while ( defined ($file3[$j]=readdir DIR3)) { next if $file3[$j]=~ /^\.\.?$/; print FILE "\tdelete file: $dirnow$file[$i]/$file2[$k]/$file3[$j]\n"; unlink "$dirnow$file[$i]/$file2[$k]/$file3[$j]"; } closedir (DIR3); print FILE "delete folder: $dirnow$file[$i]/$file2[$k]/\n"; rmdir "$dirnow$file[$i]/$file2[$k]/"; } closedir (DIR2); print FILE "delete folder: $dirnow$file[$i]/\n\n"; rmdir "$dirnow$file[$i]/"; } } } closedir (DIR); close (FILE); sub SplitTime { $now=~ s/ / /g; $now=~ s/ /:/g; @now=split(/:/,$now); $now{"month_now"}=@now[1]; $now{"day_now"}=@now[2]; $now{"year_now"}=@now[6]; } sub GetMonthEnNumber { @mid_en=("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"); foreach $i (0 .. $#mid_en){ if ($_[0] eq @mid_en[$i]){$month_num=$i+1;}; }; if ($month_num < 10) {$month_num = "0$month_num";}; return $month_num; }
<!-- спасибо! -->
: BBCode
: HTML


<!-- внимание! -->
  • Код, текст и фотографии размещенные на этом сайте принадлежат их автору - Сапронову Артёму Александровичу.
  • Допускается использование материалов сайта в личных целях.
  • Приветствуется распространение с обязательным указанием активной гиперссылки на страницу, с которой взят материал.
  • Запрещается внесение изменений в исходный текст (в том числе синонимизация и рерайт).
  • Использование материалов сайта в коммерческих целях без согласования с автором запрещено.
  • Обращайте внимание на даты. Некоторые страницы морально устарели.
  • Автор не несет отвественности за любые возможные последствия связанные с использованием материалов сайта.
  • С предложениями, замечаниями или пожеланиями обращайтесь по email.

© 14.01.2003 Артем Сапронов
http://www.sapronov.com

Спам-фильтр под Eserv ↑↓  ← Ctrl →  Конвертор расходных документов 
Все изменяется, но ничто не пропадает.
[ ОВИДИЙ ]