|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : ‘ҐаЈҐ© 2:5020/400 15 Mar 2007 11:07:14 To : Artem Chuprina Subject : Re: Про копирования каталогов... -------------------------------------------------------------------------------- Привет... Artem Chuprina пишет: AC> Sergey -> Artem Chuprina @ Tue, 13 Mar 2007 12:13:09 +0000 (UTC): AC> Пробую. AC> sub copy_dir # имена функций большими буквами применяются для констант AC> { AC> my $exc_fn = -e "$ETC/$SERVER.excl" ? "$ETC/$SERVER.excl" : "$ETC/default.excl" AC> open(my $excf, '<', $exc_fn) # поскольку файлхендл - my, он автомагически закроется при выходе из функции AC> or die "Cannot open $exc_fn: $!" AC> my %excl = map {chomp; $_=>1} <$excf>; AC> # раз уж мы проверяем исключения на точное совпадение, то и надо AC> # это делать через проверку вхождения в хэш AC> opendir(my $dh, $fromdir) AC> or dir "Cannot open directory $fromdir: $!" AC> foreach (<$dh>) { AC> next if /^\./ || $excl{$_} || ! -d "$fromdir/$_"; AC> Log(2, $_) for `$CP -pR -- "$fromdir/$_" "$outdir/" 2>&1` AC> } AC> } Да интересно... попробую его проверить на пригодность... И самое интересное, что совершенно отличается как от книжек так и от моего скрипта... :) AC> Hу и до кучи - я бы имя сервера, и возможно, обеих директорий передавал AC> бы в copy_dir параметрами. Меньше глобальных переменных - целее жопа... это в каком смысле??? Дело в том что это кусок кода из общего скрита с разными sub... AC> Да. Ты бы все-таки, если уж утверждаешь, что у тебя скрипт заработал, AC> копировал бы заработавший кусок. А то поди догадайся по твоим AC> опечаткам, что именно ты там имел в виду... Сорри исправимся... А %excl обязательно my объявлять??? А почему $_=>1 ? А как сделать, чтобы при сравнении не различались маленькие и большие буквы. Это понятно , что [a-zA-Z] или /i, но куда это впендюрить??? AC> S> ----------------- AC> S> #!/usr/bin/perl -w AC> S> $ETC = "/usr/local/etc/dir" AC> S> $SERVER=split(/,/, $ARGV[0]); AC> S> $SERVER =~ tr/a-z/A-Z/; AC> S> $fromdir="/tmp/fromdir"; AC> S> $outdir="/tmp/outdir"; AC> S> $CP="bin/cp"; AC> S> sub COPY_DIR AC> S> { AC> S> my (@strs,$str,@dirs,$dir,@dirsnew); AC> S> if ( -e $ETC/$SERVER\.excl) AC> S> { AC> S> open (EXC, "$ETC/$SERVER\.excl); AC> S> } AC> S> else AC> S> { AC> S> open (EXC, "$ETC/default\.excl"); AC> S> } AC> S> @exc = <EXC>; AC> S> chomp (@exc); AC> S> close EXC; AC> S> opendir (D, $fromdir) or warn "Cannot open AC> S> $fromdir: !" and next; AC> S> @dirs=grep {!(/^\./) && "$fromdir/$_"} readdir D; AC> S> rewinddir D; AC> S> closedir D; AC> S> @dirhash{@exc}=(); AC> S> foreach $dir (@dirs) { AC> S> push (@dirsnew, $dir) unless exists $dirhash{$dir}; AC> S> } AC> S> foreach $dir (@dirsnew) { AC> S> @strs=`($CP -pR -- "$fromdir/$dir" "$outdir/") 2>&1`; AC> S> foreach $str (@strs) AC> S> { AC> S> &Log(2,"$str"); AC> S> } AC> S> } AC> S> } -------------- С уважением Сергей -- Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru --- ifmail v.2.15dev5.3 * Origin: Talk.ru (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/6488bd9293e4.html, оценка из 5, голосов 10
|