2014-02-18 6 views
2

사용자 입력에서 'list'라는 고정 디렉토리까지 하위 디렉토리를 검색 할 수 있어야합니다. 문제는 데이터를 검색하여 나중에 표시 할 수 있도록 해시에 경로를 저장하는 방법입니다.디렉토리 검색 및 해시 저장

내 디렉토리 트리 :

     ->blue -->Aug21 --->projA ---->list ----->name 
/tmp/general/place/brand->red  -->Jan03 
         ->yellow -->June22 --->projB ---->list 

directory.pl :

use strict; 
use warnings; 

print "Searching Directory...\n"; 
&search_dir('/tmp/general/place/brand'); #could be 'tmp/general/place/brand/blue/Aug21' 
my ($input,$tt,$str,$fn,@pp,@cap); 

sub search_dir{ 
$input=shift; 
opendir DH,$input or die"$!"; 
while($_=readdir(DH)){ 
    next if $_ eq "." or $_ eq ".."; 
    if ($_ eq "list"){ 
     $fn = $input.'/'.$_; 
     push @pp, $fn; 
     return; 
     } 
    else{ 
     $fn = $input.'/'.$_; 
     } 

    if(-d $fn){ 
     push @cap,$fn; 
     } 
} 

if(scalar @cap == 0){ 
    return; 
    } 
foreach (@cap){ 
    &search_dir($_) ; 
    } 
} 

if (@pp){ 
    print "Located directory...\n"; 
    foreach $tt (@pp){ 
      $str='/tmp/general/place/brand'; 
      $tt=~ s/$str//g; 
      print $tt,"\n"; 
    #Hash? $file{$color}{$date}{$quantity}{$list}= split (/\//,$tt); 
    } 
} 
else { 
    print "Could not locate directory\n"; 
    } 

예상 출력 : 그것은 아마 쉽게 사용할 찾을 리눅스에서

Searching Directory... 
Located Directory... 
/blue/Aug21/projA/list 
/yellow/June22/projB/list 
Info :1 
Color :blue 
Date :Aug21 
Project :projA 
Info :2 
Color :yellow 
Date :June22 
Project:projB 
+0

사용 ['파일 : Find'] (http://search.cpan.org/perldoc?File%3A%3AFind) – TLP

+0

내 질문은 내가 해시로 검색 한 경로를 저장하는 방법입니다. 감사. – rein

+0

예, File :: 대부분의 코드를 대체 할 수 있습니다. 귀하의 질문을 이해하지 못했습니다. 해시가 어떻게 작동하는지 모르십니까? '$ 해시 {경로} = $ 경로'. – TLP

답변

1

. 빠르고 더럽지 만 일을 할 것입니다.

my @dirs = `/usr/bin/find -name "/tmp/general/place/brand/" -type d`; 
chomp(@dirs); 
my $data = {}; 
foreach my $dir (@dirs){ 
    my @path = split(/\//,$dir); 
    #you have found a list in the right depth 
    if (scalar(@path) >= 7 && $path[7] eq 'list'){ 
    $dir =~ s!/tmp/general/place/brand!!is; 
    print "Found $dir\n"; 
    print "Color :".$path[4]; 
    ... 
    } 
} 
+0

답변 해 주셔서 감사합니다. – rein