powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (Perl) сканирование дерева каталогв
8 сообщений из 8, страница 1 из 1
(Perl) сканирование дерева каталогв
    #33022385
Edgar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Друзья,

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

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

Заранее спасибо за отзывы.
...
Рейтинг: 0 / 0
(Perl) сканирование дерева каталогв
    #33022459
Фотография Berkut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Чувствую, что пахнет тут рекурсией.
Ты прав, именно рекурсия . Что-то подобное мы как-то в универе делали.
Давно это было...
...
Рейтинг: 0 / 0
(Perl) сканирование дерева каталогв
    #33022469
Фотография Black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
File::Copy ?
...
Рейтинг: 0 / 0
(Perl) сканирование дерева каталогв
    #33022534
Фотография 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 - список файлов
...
Рейтинг: 0 / 0
(Perl) сканирование дерева каталогв
    #33025276
Deady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот скрипт, который удаляет комментарии из всех 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
(Perl) сканирование дерева каталогв
    #33030887
g613
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
(Perl) сканирование дерева каталогв
    #33031951
Edgar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот моё решение:

Код: 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
(Perl) сканирование дерева каталогв
    #33032449
Фотография Хрен
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть стандартный CPAN-овский модуль File::Find для сканирования дерева каталогов
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (Perl) сканирование дерева каталогв
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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