Computer Hardware Forum - TweakPC

Computer Hardware Forum - TweakPC (https://www.tweakpc.de/forum/)
-   Programmiersprachen (https://www.tweakpc.de/forum/programmiersprachen/)
-   -   [PERL] Dateien die alter als 30 Tage sind zippen... (https://www.tweakpc.de/forum/programmiersprachen/62630-perl-dateien-alter-30-tage-zippen.html)

bigfoot996 24.10.2008 20:47

[PERL/PowerShell] Dateien die alter als 30 Tage sind zippen...
 
Guten Abend,

ich bräuchte mal etwas Beistand bei Perl pls *g*

Und zwar bräuchte ich etwas hilfe bei einem script, was automatisch alle Dateien im vorgegebenen Ordner die älter als 30 Tage sind zippt und dabei alle älter als 60 löscht.

soweit so gut, folgendes hab ich schon:

[code]#!c:/perl/bin/perl
use strict;

use warnings;

use constant LOESCHEN => 0;

use constant BEHALTEN => 1;

use constant DELETED => -1;

my $dir = \"C:/POWERSHELL/TESTSCRIPTS/\";

my $logFile = \"$dir/log.txt\";

my @allFiles;

my %allFiles;

my $lastMod;

my $back30days = (time()-(86400*30));

&cd($dir);

foreach(@allFiles) {

$lastMod = (stat($_))[9];

$allFiles{$_} = BEHALTEN if(($lastMod - $back30days) > 0 && -f $_);

$allFiles{$_} = LOESCHEN if(($lastMod - $back30days) < 0 && -f $_);


$allFiles{$_} = LOESCHEN if -d $_;

}

foreach(keys(%allFiles)) {


if ($allFiles{$_} == LOESCHEN && -f $_) {


$allFiles{$_} = DELETED if unlink($_);


}


}


foreach(keys(%allFiles)) {


if ($allFiles{$_} == LOESCHEN && -d $_) {


$allFiles{$_} = DELETED if rmdir($_);


}

}

&loggen();

sub loggen {


open(LOGFILE,\">$logFile\") or die $!;


foreach(keys(%allFiles)) {


print LOGFILE $_,\" --> \";


print LOGFILE \"File/Directory wurde geloescht...\n\n\" if $allFiles{$_} == DELETED;


print LOGFILE \"File/Directory ist aktuell...\n\n\" if $allFiles{$_} == BEHALTEN;

print LOGFILE \"File/Directory wurde nicht geloescht...\n\n\" if $allFiles{$_} == LOESCHEN;

}

close(LOGFILE);
}

sub cd {

my $dir = shift;

my $base = $dir.\"/\";

my @currDir;

opendir(DIR,$dir) or die $!;

@currDir=readdir(DIR);

close(DIR);

foreach(@currDir) {

next if $_ eq '.' or $_ eq '..';

&cd($base.$_) if(-d $base.$_);

push(@allFiles,$base.$_);

}
}
[/code]So, jetzt raff ichs aber nich wie ich alle älter als 30 jünger als 60 zippen lassen kann und alle über 60 löschen? Vllt. kann mir da kurz einer unter die Arme greifen pls, wäre nett.

Danke und Gruß
Biggi

bigfoot996 05.11.2008 13:12

AW: [PERL] Dateien die alter als 30 Tage sind zippen...
 
Is ja wahnsinn wie viele Leute hier perl scripten können :mrgreen: naja, fakt ist dass perl sowieso nich funktionieren wird, mein script von oben geht zwar aber das is ne andere geschichte. PowerShell muss her :kotzi:

Muss gestehen, is scheinbar auch etwas einfacher, das ganze was ich oben in was weis ich wie vielen Zeilen gescripted hab geht mit pwoershell anscheinend in 2....

[code]$now = get-date
dir \"C:\POWERSHELL\TESTSCRIPTS\\" -recurse | where-object {($now - $_.LastWriteTime).Days -lt 30} | rm[/code]

So, nun tut sich aber leider nicht sonderlich viel....kann mir einer sagen wieso?^^

bigfoot996 06.11.2008 13:36

AW: [PERL] Dateien die alter als 30 Tage sind zippen...
 
[code]function New-Zip
{
param([string]$zipfilename)
set-content $zipfilename (\"PK\" + [char]5 + [char]6 + (\"$([char]0)\" * 18))
(dir $zipfilename).IsReadOnly = $FALSE
}

new-zip c:\Powershell\TESTSCRIPTS\Archiv\archiv.zip

function Add-Zip
{
param([string]$zipfilename)

if(-not (test-path($zipfilename)))
{
set-content $zipfilename (\"PK\" + [char]5 + [char]6 + (\"$([char]0)\" * 18))
(dir $zipfilename).IsReadOnly = $FALSE
}

$shellApplication = new-object -com shell.application
$zipPackage = $shellApplication.NameSpace($zipfilename)

foreach($file in $Input)
{
$zipPackage.CopyHere($file.FullName)
Start-sleep -milliseconds 500
}
}

dir c:\Powershell\TESTSCRIPTS\*.* -Recurse | add-Zip c:\Powershell\TESTSCRIPTS\Archiv\archiv.zip

$now = get-date
dir C:\POWERSHELL\Testscripts\*.* -recurse | where-object {($now - $_.LastWriteTime).Days -gt 10} | remove-item
[/code]

falls es jemanden interessiert...habs letztendlich selber hinbekommen, vllt. kanns ja mal irgendwer brauchen.

[EID]-Mr.GiZMO 06.11.2008 14:27

AW: [PERL] Dateien die alter als 30 Tage sind zippen...
 
Immer wieder danke an Leute, die dann trotz mangelnder Beteiligung an Threads die Lösung rausrücken, die sie selber gefunden haben!

Thx, biggi!


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:11 Uhr.

Powered by vBulletin® Version 3.8.10 (Deutsch)
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
SEO by vBSEO 3.5.2 ©2010, Crawlability, Inc.