The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
получить дерево каталогов с заданием корневого каталога, !*! Александр, 08-Янв-14, 12:58  [смотреть все]
Столкнулся с задачей - создать List деревьев каталогов (полностью, тоесть пройти до максимальной глубины подкаталогов), с заданием скрипту в качестве параметра - корневой каталог, т.е.:
perl script.pl /home

Здесь нашел очень хорошие примеры, они практически соответсвуют моим нуждам:
http://perlmaven.com/recursive-subroutines
http://www.onperl.net/Reading-Directories-Recursively

Но приведенные там скрипты корректно обходят все подкаталоги только когда запускаются без параметров и соответственно обходят только подкаталоги только в директориии где находится сам скрипт.

Помогите пожалуйста состовить скрипт которому возможно скормить в качестве параметра корневой каталог для составления дерева подкаталогов. спасибо!

  • получить дерево каталогов с заданием корневого каталога, !*! Александр, 17:12 , 08-Янв-14 (1)
    my @contents;
    sub read_directorys_tree {
        my ($dir, @tmp) = @_;
        my @arr;
        push @arr, @tmp if(@tmp);
        push @arr, $dir if( -d $dir);
        opendir(my $dh, $dir) or die $!;
        while(my $file = readdir($dh)) {
            next if($file eq '.' || $file eq '..');
            my $path = $dir . '\\' . $file;
            read_directorys_tree($path, @arr) if(-d $path);
        }
        closedir($dh);
        print Dumper @arr;
        return @arr;
    }

    @contents = read_directorys_tree("c:\\cygwin64\\home\\temp0", @contents);
    print $_."\n" for @contents;
    print "\n\n";


    #описанная функция возвращает только первый елемент (корневой каталог), а мне нужно всё дерево

  • получить дерево каталогов с заданием корневого каталога, !*! pavlinux, 18:59 , 08-Янв-14 (2)
    > Помогите пожалуйста состовить скрипт которому возможно скормить в качестве параметра корневой
    > каталог для составления дерева подкаталогов. спасибо!

    Google: perl @ARGV @ARGC


    • получить дерево каталогов с заданием корневого каталога, !*! Александр, 19:45 , 08-Янв-14 (3)
      > Google: perl @ARGV @ARGC

      #я так понимаю проблема в самой рекурсии, я набросал простой код, для проверки:
      my $a;
      sub test_rec {
          my ($end, $ref) = @_;
          my @arr;
          push @arr, $ref if ($ref);
          push @arr, $end;
          for(my $i =1; $i < $end; $i++) {
              test_rec($end - $i, \@arr);
          }
          return \@arr;
      }

      $a = test_rec(3, $a);
      print "\n\n@{$a}"."\n\n";
      print @_."\n" for @{$a};

      #в результате получаю один елемент (импользуемый в первом проходе рекурсии), Пробовал и по ссылкам и по значениям передавать.. При пощаговом прохождение все нормально до вызова return, при этом один за одним удаляются элементы из массива.
      #задачу можно легко решить используя для push внешний массив, но я хочу разобраться как решить эту задачу имено используя внутренний массив в рекурсиивной функции.

  • получить дерево каталогов с заданием корневого каталога, !*! михалыч, 20:31 , 08-Янв-14 (4)
    > Помогите пожалуйста состовить скрипт которому возможно скормить в качестве параметра корневой каталог для составления дерева подкаталогов. спасибо!

    #!/usr/bin/perl

    use strict;
    use warnings;

    my @dirs;
    my $path = shift;

    &dir($path);

    sub dir($) {
        my $dir = shift;
        my $dh;

        opendir $dh, $dir;
        while ( my $sub = readdir $dh) {
            next if $sub =~ /^\.\.?$/;
            push @dirs, "$dir/$sub" if -d "$dir/$sub";
            &dir("$dir/$sub") if -d "$dir/$sub";
        }
        closedir $dh;
    }

    for(@dirs){print $_,"\n";}





Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру