Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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 !

Geschrieben

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;

}

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...