Majestix Geschrieben 17. Januar 2006 Geschrieben 17. Januar 2006 moin leute, ich hab nen problem mit perl ! ich brauch ein script das mir folder mit allen(files/subfolder) inhalten kopiert. und zwar breuchte ich nen ganz einfachen source code, wo ich eine "source folder" angeben und eine "destination folder"... bisher habe ich #!/usr/bin/perl use File::Copy ; # Quell und Zielverzeichnis my $base_dir = "C:/base" ; my $save_dir = "C:/save" ; # Verz. zum lesen oeffnen opendir (BASE, $base_dir) || die "Kann Verz. nicht lesen: "; # Verzeichnis einlesen (./.. aussortieren und checken ob datei) my @dir = readdir("BASE"); closedir (BASE); # Alle eingelesenen Dateien durchgehen foreach my $file (@dir) { # Und kopieren copy("$base_dir/$file", "$save_dir/$file"); } hierbei werden aber nur die dateien die sich direkt und dem ordner "base" befinden kopiert. die subfolders werden ignoriert. ich denke mal das ganze sollte irgendwie mit File::Find und File::Copy möglich sein. Nur ich weiß nicht wie , da ich erst seid heute mit Perl arbeite. WICHTIG IST!! das ich nicht das modul File::NCopy benutzen kann, da das ganze auf mehrern rechner laufen soll, auf dennen das cpan plugin nicht installiert ist. hoffe auf hilfe ! vorab danke ! Zitieren
Majestix Geschrieben 18. Januar 2006 Autor Geschrieben 18. Januar 2006 hab selber ne lösung gefunden ! für alle die es interessiert: #!/usr/bin/perl use strict; use File::Copy; # # main program # my @list = recursive_filesearch('C:\ICI_FileScanner\base'); foreach my $i (@list) { my $target = filecopy($i, 'C:\ICI_FileScanner\base', 'C:\ICI_FileScanner\save'); print "copied $target\n"; } exit(0); #///////////////////////////////////// # library #///////////////////////////////////// sub recursive_filesearch { my $startFolder = shift; my @folderList = ($startFolder); my @result = (); my ($currentFolder, $i, $fullPath); # # recursive search simulated with list. # while( @folderList ) { # # draw first element from list. # $currentFolder = shift(@folderList); # # parse folder with opendir/readdir/closedir loop. # opendir(DIR, $currentFolder) or die "cannot open folder $currentFolder: $!"; while( $i = readdir(DIR) ) { # # tricky: ignore folders which will cause havoc to # a recursive search. # next if '.' eq $i; next if '..' eq $i; # # build full filename/foldername. # $fullPath = $currentFolder . '\\' . $i; # # store folders for subfolder searches. # push(@folderList, $fullPath) if -d $fullPath; # # store any file/folder in result. # push(@result, $fullPath); } closedir(DIR); } # # return all found files/folders as list # return @result; } # # wrapper around File::Copy::copy. takes care of folders. # sub filecopy { my ($sourceFile, $fromFolder, $toFolder) = @_; my $targetFile; # # abort if $sourceFile don't belong to $fromFolder # if( 0 != index($sourceFile, $fromFolder) ) { die "$sourceFile outside of $fromFolder"; } my $i = length($fromFolder); $targetFile = $toFolder . substr($sourceFile, $i); # # assure existence of target folder # mkdir($toFolder) unless -d $toFolder; if( -d $sourceFile ) { # # folders are not copied but created. # mkdir($targetFile); } else { # # files are copied via File::Copy::copy. # copy($sourceFile, $targetFile); } return $targetFile; } Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.