*.pl o.ae. archivieren
Rolf
- perl
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--->
#####################################################################
$dir = "c:";
$sikdir = "d:/pls";
$archive = "perlscripte_c";
$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
sub rapport{
print "Es wurden $i Dateien der Erweiterung '$ext' in das folgende Archiv gesichert: '$sikdir/$archive.tar'\n";
}
<---schnapp---<
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
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