Главная страница


ru.perl

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

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Про копирования каталогов...   Sergey   07 Mar 2007 09:16:01 
 Re: Про копирования каталогов...   Artem Chuprina   07 Mar 2007 17:31:54 
 Re: Про копирования каталогов...   ‘ҐаЈҐ©   09 Mar 2007 09:32:31 
 Re: Про копирования каталогов...   ‘ҐаЈҐ©   09 Mar 2007 11:53:16 
 Re: Про копирования каталогов...   Artem Chuprina   11 Mar 2007 02:31:15 
 Re: Про копирования каталогов...   Sergey   13 Mar 2007 16:13:09 
 Re: Про копирования каталогов...   Serge Chervjakov   13 Mar 2007 21:16:16 
 Re: Про копирования каталогов...   Sergey   14 Mar 2007 15:41:55 
 Re: Про копирования каталогов...   Artem Chuprina   14 Mar 2007 18:03:48 
 Re: Про копирования каталогов...   Serge Chervjakov   14 Mar 2007 19:11:24 
 Re: Про копирования каталогов...   Artem Chuprina   14 Mar 2007 21:28:18 
 Про копирования каталогов...   Alexey Zhidkov   24 Mar 2007 21:07:12 
 Moderatorial [+] (was: Про копирования каталогов...)   Moderator of RU.PERL   24 Mar 2007 17:01:51 
 Re: Про копирования каталогов...   ‘ҐаЈҐ©   15 Mar 2007 11:07:14 
 Re: Про копирования каталогов...   Artem Chuprina   15 Mar 2007 13:23:38 
 Re: Про копирования каталогов...   Sergey   19 Mar 2007 12:02:58 
 Re: Про копирования каталогов...   Artem Chuprina   19 Mar 2007 14:06:31 
 Про копирования каталогов...   Alexey Zhidkov   24 Mar 2007 17:42:29 
Архивное /ru.perl/25606eaf51234.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional