2012-08-31 2 views
0

내가 네트워크 경로에 대한 최신 하위 디렉토리를 찾아 네트워크 경로펄 - 네트워크 경로에 대한 최신 하위 디렉토리를 찾아 전체 내용이

에서 다른 폴더로 최신 하위 디렉토리의 전체 내용을 복사하려면 복사 우리 \\10.184.132.202\projectdump 하위 폴더를 정렬해야 최신 폴더에 들어가고 전체 내용을 다른 폴더에 복사해야합니다. \\10.184.132.203\baseline

나는 아래에 언급 된 스크립트를 사용하여 최신 수정 된 폴더를 나열 할 수 있습니다. 디렉토리 아래에 있지만 내용을 복사하지 못했습니다.

use File::stat; 
use File::Copy qw(copy); 
$dirname = '\\\\10.184.132.202\\projectdump\\Testing\\'; 
$destination = '\\\\10.184.132.203\\baseline\\Testing\\'; 
$timediff=0; 
opendir DIR, "$dirname"; 
while (defined ($sub_dir = readdir(DIR))) 
{ 
    if($sub_dir ne "." && $sub_dir ne "..") 
    { 
     $diff = time()-stat("$dirname/$sub_dir")->mtime; 
     if($timediff == 0) 
     { 
      $timediff=$diff; 
      $newest=$sub_dir; 
     } 
     if($diff<$timediff) 
     { 
      $timediff=$diff; 
      $newest=$sub_dir; 
     } 
    } 
} 
print $newest,"\n"; 

open my $in, '<', $newest or die $!; 
while (<$in>) { 
    copy *, $destination; --------> Here i want to copy the entire contents of the $newest to $destination. 
} 
+0

File :: Copy 모듈을 사용하십시오. 또한'open'의 리턴 코드를 검사하고 있지만'opendir'는 리턴 코드를 검사하지 않습니다. 그것도 실패 할 수 있습니다. 또한'$ dirname'을 따옴표로 묶을 필요가 없습니다. –

답변

0

왜 간단한 쉘 cmd를 호출하여 최신 디렉토리를 찾지 않습니까? 내가 생각 , 이것은 쉘에서

my $newestdir=`ls -1rt $dirname|tail -n 1`; 

... 쉘에서 훨씬 더 간단 할 것이다 :

LATESTDIR=`ls -1rt $dirname|tail -n 1` 
cp -r ${LATESTDIR}/* $destination/ 

때도, 난 그냥 당신이 윈도우 ...

모든 가져 오기 사용 수 있음을 깨달았 dirs와 그 시간을 해시로 변환 한 다음 그 해시를 역순으로 정렬하여 최신 것을 찾습니다.

my ($newest) = sort {$hash{$b} cmp $hash{$a} keys %hash; 

그 다음

opendir NDIR, "$newest"; 
while ($dir=<NDIR>) { 
next if $dir eq '.' or $dir eq '..'; 
copy $dir, $destination; 
} 
+0

정렬 후에도 여전히 파일을 복사 할 수 없습니다. – user1587062

1

File::Copy::Recursive를 사용하십시오. 이것은 선택적 모듈이지만 전체 디렉토리 트리를 복사 할 수 있습니다. 아쉽게도 File::Copy::Recursive은 표준 Perl 모듈이 아니지만 cpan 명령을 통해 설치할 수 있습니다.

모듈 설치에 문제가있는 경우 (경우에 따라 다름) File::Find을 사용하여 디렉토리 트리를 통과하고 파일을 한 번에 하나씩 복사 할 수 있습니다.

그런데 Perl에서는 Windows 파일 이름에 슬래시를 사용할 수 있으므로 백 슬래시를 두 배로 늘릴 필요가 없습니다.

관련 문제