Rolf: *.pl o.ae. archivieren

Hallo Perler & Co,

weil heute Sonntag ist poste ich mal was direkt aus meiner Bastelkiste... also es ging mir darum, mit einem KLICK Dateien einer bestimmten  Erweiterung (z.B.: "pl") von einem Startverzeichnis aus (z.B.: "c:") in ein Arschief zu sichern... Nuja, wenn es schon PERLSrcipten sind die ich sichern möchte, dann auch mit einem PERLScript "archive.pl". Dieses Script steht ab sofort jedem zur freien Verfügung.

Ihr könnt es benutzen, verbessern, bemeckern (ja bitte her mit Kommentaren!) oder auch kommentarlos in die Mülltonne stecken - wie auch immer: viel Spass damit.

Viele Grüße, Rolf

---schnipp---archive.pl--->

Script archiviert Dateien in eine *.tar

Geschrieben von Rolf Rost am Sonntag, 17. Oktober 1999

#####################################################################

Adminvorgaben

Startdirectory, am Ende keinen Slash, diese DIR wird duchsucht

$dir = "c:";

Sicherungsdirectory, am Ende keinen Slash, diese DIR muss es geben

$sikdir = "d:/pls";

Name des zu erstellenden Archives

$archive = "perlscripte_c";

Dateien der folgenden Erweiterung sollen gesichert werden

$ext = "pl";
#####################################################################

use Archive::Tar;
$tar = Archive::Tar->new();

&dir_sub($dir);     # Funktion scannt das Verzeichnis /sub
&rapport;           # Rapport, was gemacht

$i = 0;             # Zählvariable
sub dir_sub {
    my $dir = shift;
    my $path;
     unless (opendir(DIR, $dir)) {
   closedir(DIR);
   return;
     }
    foreach (readdir(DIR)) {
  next if $_ eq '.' $_ eq '..';
  $path = "$dir/$_";
  if (-d $path) {  # hurra ein Verzeichnis...
      &dir_sub($path);# ... rufe diese Funktion erneut
  }
  elsif (-f _) {     # hurra eine Datei...
      if(/.$ext/i){  # Nur meine Erweiterung
    $tar->add_files($path); # ab ins Archiv
    $i++;       # Zähler erhöhen
   }
  }
    }
    closedir(DIR);
}

$tar->write($sikdir."/".$archive.".tar"); #  Archive schreiben

Ausgabe des Rapports

sub rapport{
print "Es wurden $i Dateien der Erweiterung '$ext' in das folgende Archiv gesichert: '$sikdir/$archive.tar'\n";
}
<---schnapp---<

  1. Hi,

    Ihr könnt es benutzen, verbessern, bemeckern (ja bitte her mit Kommentaren!)

    *Bist* *Du* *Dir* *wirklich* *ganz* *sicher*? [dsf 1.5] ;-)

    Okay, dann will ich mal. Ist aber alles konstruktiv gemeint!

    elsif (-f _) {     # hurra eine Datei...

    Äh... elsif (-f $_), oder?

    if(/.$ext/i){  # Nur meine Erweiterung

    /.$ext$/i, damit nicht eine ".play" auch archiviert wird.

    sub rapport{

    print "Content-type: text/plain\n\n";

    »»  print "Es wurden $i Dateien der Erweiterung '$ext' in das folgende Archiv gesichert: '$sikdir/$archive.tar'\n";

    Vieles hättest Du Dir mit File::Find vereinfachen können! Quickhack (ungetestet):

    use File::Find;
    use Archive::Tar;
    $dir = "c:";
    $sikdir = "d:/pls";
    $archive = "perlscripte_c";
    $ext = "pl";
    $tar = Archive::Tar->new();
    $i = 0;
    find(&add_tar, $dir);
    sub add_tar {
      if ($File::Find::name =~ /.$ext$/i) { $tar->add_files($File::Find::name); $i++; }
    }
    $tar->write("$sikdir/$archive.tar");
    print "Content-type: text/plain\n\n";
    print "Es wurden $i Dateien der Erweiterung '$ext' in das folgende Archiv gesichert: '$sikdir/$archive.tar'\n";

    Die Bug-Suche darfst Du übernehmen ;-)

    Cheatah

    1. Hallo Cheatah, vielen Dank

      elsif (-f _) {     # hurra eine Datei...

      Äh... elsif (-f $_), oder?

      das geht so ;-)

      if(/.$ext/i){  # Nur meine Erweiterung

      /.$ext$/i, damit nicht eine ".play" auch archiviert wird.

      Danke auch dafür.

      print "Content-type: text/plain\n\n";

      Kann entfallen, ist kein CGI...

      Vieles hättest Du Dir mit File::Find vereinfachen können! Quickhack (ungetestet):

      use File::Find;
      use Archive::Tar;
      $dir = "c:";
      $sikdir = "d:/pls";
      $archive = "perlscripte_c";
      $ext = "pl";
      $tar = Archive::Tar->new();
      $i = 0;
      find(&add_tar, $dir);
      sub add_tar {
        if ($File::Find::name =~ /.$ext$/i) { $tar->add_files($File::Find::name); $i++; }
      }
      $tar->write("$sikdir/$archive.tar");
      print "Content-type: text/plain\n\n";
      print "Es wurden $i Dateien der Erweiterung '$ext' in das folgende Archiv gesichert: '$sikdir/$archive.tar'\n";

      Die Bug-Suche darfst Du übernehmen ;-)

      Mach ich! Heute Abend....

      Viele Grüße, Rolf