Zum Inhalt springen

[PERL] Folder inkl. Subfolder kopieren


Empfohlene Beiträge

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 !

Link zu diesem Kommentar
Auf anderen Seiten teilen

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;

}

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

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...