Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (Perl) сканирование дерева каталогв / 8 сообщений из 8, страница 1 из 1
19.04.2005, 09:24
    #33022385
Edgar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(Perl) сканирование дерева каталогв
Друзья,

Задача сканирования дерева каталогов.
Чувствую, что пахнет тут рекурсией.
Словом задача такая. Есть список файлов. Их надо будет скопировать в
во все подкаталоги последнего уровня с именем new всех имеющихся каталогов.
Как вы догадалось, речь идёт о рассылке почты.

И второй вопрос. Можно ли использовать системный вызов cp для осуществления этого копирования?

Заранее спасибо за отзывы.
...
Рейтинг: 0 / 0
19.04.2005, 10:08
    #33022459
Berkut
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(Perl) сканирование дерева каталогв
> Чувствую, что пахнет тут рекурсией.
Ты прав, именно рекурсия . Что-то подобное мы как-то в универе делали.
Давно это было...
...
Рейтинг: 0 / 0
19.04.2005, 10:12
    #33022469
Black
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(Perl) сканирование дерева каталогв
File::Copy ?
...
Рейтинг: 0 / 0
19.04.2005, 10:42
    #33022534
XM
XM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(Perl) сканирование дерева каталогв
Чисто средствами shell
Код: plaintext
find . -name 'new' -exec ./mycopy.sh '{}' ';'
mycopy.sh :
Код: plaintext
1.
2.
3.
4.
#!/bin/bash
if [ -d $ 1  ]; then
   cp `cat filelist` $ 1 ;
fi
В файле filelist - список файлов
...
Рейтинг: 0 / 0
20.04.2005, 13:52
    #33025276
Deady
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(Perl) сканирование дерева каталогв
вот скрипт, который удаляет комментарии из всех java файлов в текущем каталоге и всех подкаталогах.


sub convert {
my $dir = shift;
while (<$dir/*.java>) {
print $_."\n";
@lines = ();
open(F, $_);
while ($line = <F>) {
$line =~ s|//.*$||;
@lines = (@lines, $line);
}
close(F);

$full = join("", @lines);

$full =~ s/\/\*(.|\n)*?\*\///g;

open(F, ">".$_);
print F $full;
close(F);
}
}


sub work_folder {
my $dir=shift;
return 0 unless $dir;

if (-d $dir) {
convert($dir);
}
foreach $f (glob("$dir/*")) {
# Пропускаем спецфайлы . и ..
if (!($f=~m/.*\.\.?$/)) {
my $filename="$f";
if (-d $filename) {
work_folder($filename);
}
}
}
}

work_folder(".");
...
Рейтинг: 0 / 0
22.04.2005, 17:17
    #33030887
g613
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(Perl) сканирование дерева каталогв
XMЧисто средствами shell
Код: plaintext
find . -name 'new' -exec ./mycopy.sh '{}' ';'
mycopy.sh :
Код: plaintext
1.
2.
3.
4.
#!/bin/bash
if [ -d $ 1  ]; then
   cp `cat filelist` $ 1 ;
fi
В файле filelist - список файлов

более чисто таки так:
Код: plaintext
1.
find -name new -type d -exec cp my_file {} ';'
...
Рейтинг: 0 / 0
24.04.2005, 00:15
    #33031951
Edgar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(Perl) сканирование дерева каталогв
Вот моё решение:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
sub  scan_files {

     my $dir=$_[ 0 ];
     my (@dirs,@files,$filename,$newdir,$list);

     opendir(DIR,$dir) or (print "Cannot open $dir: $!\n");
     @dirs=grep {!(/^\./) && -d "$dir/$_"} readdir(DIR);
     rewinddir(DIR);
     closedir (DIR);

     for $list( 0 ..$#dirs) {
         $newdir=$dir."/".$dirs[$list];
         if ($newdir =~ /subscriber\/Maildir\/new$/ ) {next}
         push @dest_dirs, $newdir if ($newdir =~ /new$/ )
         &scan_files ($newdir);
     }
     
     return  1 ;
}

&scan_files($base_dir);

opendir(Dir, $SourceDir) ||die();

while ($file = readdir(Dir))
        {
          push @l, $file if ($file !~ /^\./);
        }
closedir(Dir);


foreach $source (@l){
  chomp;
  foreach $dest_dir(@dest_dirs){
    system("cp $SourceDir/".$source." $dest_dir/"."$source");
  }
}
...
Рейтинг: 0 / 0
25.04.2005, 00:23
    #33032449
Хрен
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(Perl) сканирование дерева каталогв
Есть стандартный CPAN-овский модуль File::Find для сканирования дерева каталогов
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (Perl) сканирование дерева каталогв / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]