Perl-программирование под Windows. Ежемесячное резервное копирование данных.

Дек 29th, 2009 | Posted by | Filed under PC, Software, Windows

Сегодня писал скрипт, который делает резервное копирование всех файлов, изменявшихся в течение текущего месяца.

Идея простая — каждый день в 23-59 запускается скрипт, который просматривает архивируемую директорию, находит в ней файлы, изменённые в этом месяце, загоняет их в список и этот список архивирует с помощью 7zip.

Данный скрипт работает с одной единственной директорией и не поддерживает поддиректорий. Если вам это нужно, смотрите документацию по команде dir и корректируйте скрипт.

$path=»ДИСК:\\ПУТЬ\\К\\ДИРЕКТОРИИ\\»;
$pathbk=»ДИСК:\\ПУТЬ\\К\\ДИРЕКТОРИИ\\С\\БЭКАПОМ\\»;
$prefbk=»ПРЕФИКС_ИМЕНИ_ФАЙЛА_БЭКАПА»;
$t=time;
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime($t);
$year+=1900;
$mon++;
if ($mon<10){$mon=»0″.»$mon»;}
$find=»$mon.$year»;
`del /q $pathbk$prefbk$find.7z`;
`date.exe /T>$pathbk$prefbk$find.rep`;
`time.exe /T>>$pathbk$prefbk$find.rep`;
foreach $line (`dir /c $path`){
chomp $line;
($date,$time,$size,$filename)=split(/ +/,$line,4);
($d,$mn)=split(/\./,$date,2);
next if ($find ne $mn);
next if («<DIR>»=~$filename);
`echo $path$filename>>\%TEMP\%\\bklist.lst`;
}
`c:\\progra~1\\7-zip\\7z.exe a -r -y -w$pathbk $pathbk$prefbk$find.7z -i\@\%TEMP\%\\bklist.lst>>$pathbk$prefbk$find.rep`;
`del /q \%TEMP\%\\bklist.lst`;
`date.exe /T>>$pathbk$prefbk$find.rep`;
`time.exe /T>>$pathbk$prefbk$find.rep`;
exit 0;

Для работы скрипта требуется установленный архиватор 7zip.

  1. Тимофей Ха
    Дек 29th, 2009 at 19:04
    Reply | Quote | #1

    «Данный скрипт работает с одной единственной директорией и не поддерживает поддиректорий. Если вам это нужно, смотрите документацию по команде dir и корректируйте скрипт.»

    Саша, делай dir /b /s

  2. admin
    Дек 30th, 2009 at 11:52
    Reply | Quote | #2

    Ну вот ты всё и подсказал 🙂 У меня не было задачи архивировать с подкаталогами, так что писать не стал. А с подкаталогами я думаю сделать инкрементальный бэкап пользовательских документов 🙂 Но уже не в этом году.

  3. admin
    Дек 30th, 2009 at 13:36
    Reply | Quote | #3

    Хороший вопрос — как сделать подобное без Perl. Можно ли сделать подобное в простом cmd-скрипте без языков программирования или специализированных программ?