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;

}

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