|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Sergey 2:5020/400 13 Mar 2007 16:13:09 To : Artem Chuprina Subject : Re: Про копирования каталогов... -------------------------------------------------------------------------------- Привет... "Artem Chuprina" <ran+news@ran.pp.ru> сообщил/сообщила в новостях следующее: news:11969810@wizzle.ran.pp.ru... > Сергей -> Sergey @ Fri, 9 Mar 2007 07:53:16 +0000 (UTC): > > С> Привет... > > С> Ха прикольно это работает... :))) > С> -------------------- > С> #!/usr/bin/perl -w > С> $ETC = "/usr/local/etc/dir" > С> $SERVER=split(/,/, $ARGV[0]); > С> $SERVER =~ tr/a-z/A-Z/; > С> $fromdir="/tmp/fromdir"; > С> $outdir="/tmp/outdir"; > С> $CP="bin/cp"; > > С> sub COPY_DIR > С> { > С> my (@strs,$str,@dirs,$dir); > > С> if ( -e $ETC/$SERVER\.excl) > С> { > С> open (EXC, "$ETC/$SERVER\.excl); > С> } > С> else > С> { > С> open (EXC, "$ETC/default\.excl"); > С> } > С> while ( $exc = <EXC> ) > С> { > С> chomp $exc; > С> opendir (D, $fromdir) or warn "Cannot open > С> $fromdir: !" and next; > С> @dirs=grep {!(/^\./) && "$fromdir/$_"} readdir D; > С> rewinddir D; > С> foreach $dir (@dirs) > С> { > С> if ( "$dir" ne "$exc" ) > С> { > С> @strs=`($CP -pR -- "$fromdir/$dir" "$outdir") &2>1`; > С> foreach $str (@strs) > С> { > С> &Log(2,"$str"); > С> } > С> closedir D; > С> } > С> } > С> close EXC; > С> } > С> ------------ > С> Короче это выглядит так... В файле $exc 6 записей > С> и при выполнении скрипта происходит 6 раз <skip> > > Ми же вас придуприждалы... У тебя цикл по исключениям - внешний по > отношению к циклу по директориям. А надо, ну в худшем случае наоборот. > В правильном еще внутри должен быть не цикл, а проверка на вхождение в > хэш, но это когда программировать научишься. Сперва сделай, чтоб > работало. Правда ваша :) Вот сделал как.... Может посоветуете покрасивее, мож работать быстрее будет... да и вааще покажите как гуру этот вариант бы написали??? Вариант-то класический, а в книжках как-то коряво все... :) ----------------- #!/usr/bin/perl -w $ETC = "/usr/local/etc/dir" $SERVER=split(/,/, $ARGV[0]); $SERVER =~ tr/a-z/A-Z/; $fromdir="/tmp/fromdir"; $outdir="/tmp/outdir"; $CP="bin/cp"; sub COPY_DIR { my (@strs,$str,@dirs,$dir,@dirsnew); if ( -e $ETC/$SERVER\.excl) { open (EXC, "$ETC/$SERVER\.excl); } else { open (EXC, "$ETC/default\.excl"); } @exc = <EXC>; chomp (@exc); close EXC; opendir (D, $fromdir) or warn "Cannot open $fromdir: !" and next; @dirs=grep {!(/^\./) && "$fromdir/$_"} readdir D; rewinddir D; closedir D; @dirhash{@exc}=(); foreach $dir (@dirs) { push (@dirsnew, $dir) unless exists $dirhash{$dir}; } foreach $dir (@dirsnew) { @strs=`($CP -pR -- "$fromdir/$dir" "$outdir") &2>1`; foreach $str (@strs) { &Log(2,"$str"); } } } > Да, в команде копирования в "$outdir" перед закрывающей кавычкой добавь > / - может пригодиться... Да пригодилось... сенкс... -------- > Artem Chuprina > RFC2822: <ran{}ran.pp.ru> Jabber: ran@jabber.ran.pp.ru ----------------- С уважением Сергей -- Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru --- ifmail v.2.15dev5.3 * Origin: SICE (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/64884ad6ce11.html, оценка из 5, голосов 10
|