#!/usr/bin/perl # версия 1.1 исправленная. # исправления: # + исправлена ошибка с некорректной перекодировкой в utf8, в результате чего скрипт останавливался перед копированием первых файлов. # OS - LINUX, сист. требования - PERL, UNZIP, кодировка локали utf-8, кому надо под Windows или еще как # модифицировать пишите в комментариях на www.linformatika.ru # Этот скрипт распаковывает архивы с файлами ЦОР в заданной директории, # переименовывает папки с распакованными материалами в понятный вид и сортирует # в три директории Интерактивы, Иллюстрации, Прочие. # Прошу строго не судить скрипт я не программист. # А скрипт этот был написан потому, что диски с ЦОР в Linux использовать крайне не удобно, # т.к. архивы имеют названия по которым не определить что внутри. Вручную перебрать даже 200 архивов очень затруднительно. Что касается работы в 1С:Образование 4 под Windows, то она работает крайне медленно на слабых машинах, # а так ресурсы можно использовать стандарными средствами ОС. # файл .dcr можно открыть: # * Web-браузер с подключаемым модулем Adobe Shockwave Player # * dirOpener # Автор пользователь DEN2007 с www.linformatika.ru # Выставьте свои параметры. $in='/media/cdrom/ELSP_A2_Gr_001_002 - 03_25_06/Resource/'; # Указание директории с ЦОР. $out='/home/denis/cor2/'; # Указание директории для распакованных ЦОР. $tmp='/tmp/edu_zip/'; # отдельная пустая директория для временных распакованных файлов !!!!! system"rm -R -f $tmp"; system"rm -R -f ${out}*"; #---------------!!!!!!!!!!!!!!!!!не изменять!!!!!!!!!!!!!!!!!------------------------------------------ #****************************************************************************************************** if(!-e "$out"){ print"Указанная директория\n$out\nдля преобразованных ЦОР не существует.\n";exit;} if(!-e "$in"){ print"Указанная директория\n$in\nc ресурсами ЦОР не существует.\n";exit;} mkdir "${out}Иллюстрации" or die "$!"; mkdir "${out}Интерактивы" or die "$!"; mkdir "${out}Прочие" or die "$!"; mkdir "$tmp" or die "$!"; opendir DIR, "$in" if -e "$in" or die "not open $in"; @zip= grep /^(DL_RES)|(dl_res).{5,}zip$/,readdir DIR; closedir(DIR); for($i=0;$i); close(INFO); #for($j=0; $j<16; $j++){ #Ищем в XML Название, описание for($j=0; $j<16; $j++){ $rf=$info[$j]; $stroka="$stroka$rf"; } print"\n\n$stroka\n\n"; #if($info[$j]=~//){ #$title=$info[$j]; $title=$stroka; @tmp1=split(/<title>/, $title); $title=$tmp1[1]; @tmp1=split(/<\/title>/, $title); $title=$tmp1[0]; $title=~ s/<([^>])*>//g; $title=~ s/^(\s{1,})|$(\s{1,})//; $title=~ s/\?|\"|\'|//g; #} #} #for($j=0; $j<16; $j++){ #if($info[$j]=~/<description>/){ #$description=$info[$j]; $description=$stroka; @tmp1=split(/<description>/, $title); $description=$tmp1[1]; @tmp1=split(/<\/description>/, $title); $description=$tmp1[0]; $description=~ s/<([^>])*>//g; $description=~ s/^(\s{1,})|$(\s{1,})//; $description=~ s/\?|\"|\'|//g; #} #} } sub group{ if($description=~/Интерактив/i){$group='Интерактивы';} elsif($description=~/Иллюстрация/i){$group='Иллюстрации';} else{$group='Прочие';} } sub copy{ opendir DIR, "$tmp$name" if -e "$tmp$name" or die "not open $tmp$name"; @files= grep !/(\.xml$)|(^\.)/,readdir DIR; closedir(DIR); $outdir="${out}$group/$title"; $g='1'; if(-e "$outdir"){mkdir "${out}$group/${title}_$g"; $g++;} else{mkdir "${out}$group/$title";$g='1';} foreach (@files){ print"copy in $tmp$name/$_ $out$group/$title/$_\n"; #rename ("$tmp$name/$_", "$out$group/$title/$_"); system("cp -r \"$tmp$name/$_\" \"$out$group/$title/$_\"\n"); } }