Majestix Geschrieben 17. Januar 2006 Teilen 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 Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Majestix Geschrieben 18. Januar 2006 Autor Teilen 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 Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
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.