[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 |
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?^^ |
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. |
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.