Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]6076[/thread]

Dateien nach 14 tagen löschen (Seite 2)

Leser: 2


<< |< 1 2 3 >| >> 21 Einträge, 3 Seiten
Crian
 2004-02-16 22:25
#80091 #80091
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
@ [E|B] egal wie das Skript aussieht, wenn es nicht regelmäßig läuft, werden die Dateien vermutlich auch nicht von alleine verschwinden ;)


SCNR :p
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
mobas
 2004-02-17 10:12
#80092 #80092
User since
2004-02-11
19 Artikel
BenutzerIn
[default_avatar]
hallo alle zusammen!

wow!!!

also mit so einer flut an guten ideen hab ich nu gar nicht gerechnet! respekt und vielen dank!!!

das script wird wie schon vermutet und sinnvoller weise per cronjab gestartet. und zwar alle 15 min.
die dateien enden wirklich nur auf diesem datumsformat und beinhalten verschiedene daten.

@coax:
könntest du eventuell mal deinen code ein bisschen kommentieren!? hab da nämlich ein paar verständnissprobleme :D
Quote
my(@date) = unpack("A4A2A2A2A2A2", $tstr);
printf("%02d:%02d:%02d %02d.%02d.%04d\n", @date[3,4,5,2,1,0]);
my($datestr) = $filename =~ /\.(\d+)$/;

könntest du über diese zeilen ein paar worte verlieren!?

aber ich werd gleich mal die ideen in die praxis umsetzten :)
ich werd mich dann bestimmt noch mal melden.

aber vielen dank noch mal für eure hilfe!!!!!

mfg mobas
Crian
 2004-02-17 10:55
#80093 #80093
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
my(@date) = unpack("A4A2A2A2A2A2", $tstr);
printf("%02d:%02d:%02d %02d.%02d.%04d\n", @date[3,4,5,2,1,0]);


In $tstr steht der Timestamp. Diesen zerlegt Coax mit unpack in 6 Teile, deren erster 4 und deren restliche je 2 Zeichen lang sind. Diese Teile wandern ins Array @date.
(Ich glaub die Klammer darum könnte man sich wohl sparen, aber ich kenn unpack nicht.)
printf gibt das dann schön formatiert (mit führenden Nullen, Format genau wie bei C) aus. Das Arrayslice wird nur verwendet, um die Daten in der richtigen Reihenfolge auszugeben.

Edit: Nach Lesen von perldoc -f unpack kann man sich die Klammern sparen. Es geht nur darum, Array-Kontext zu erzeugen, und das tut @date schon. Wenn man die Dinge benennen wollte müsste man sowas schreiben:

my ($year, $month, $day, $hour, $minute, $second) = unpack(...)\n\n

<!--EDIT|Crian|1077008695-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
snarf
 2004-02-17 13:08
#80094 #80094
User since
2003-08-14
77 Artikel
BenutzerIn
[default_avatar]
... INHO ist ein Perl-Script da leichter Overdo ...

Bei einem CronJob würde ich immer auf Shell-Cmds zurückgreifen, a la

Code: (dl )
1
2
 
find / -mtime xyz -name "name.*"| while read a; do rm $a; done;


Für die genaue Spezifikation fürs mtime (oder atime, ctime) müsstest Du halt nochmals die man pages befragen

ReadU, Dirk\n\n

<!--EDIT|snarf|1077016179-->
mobas
 2004-02-17 13:10
#80095 #80095
User since
2004-02-11
19 Artikel
BenutzerIn
[default_avatar]
hi,

danke crian für die aufklärung! :)
jetzt wird einiges schlüssiger.
kannst du mir noch sagen was das zu bedeuten hat!?
my($datestr) = $filename =~ /\.(\d+)$/;

mir ist nicht ganz klar was die zeichen (~ /\.(\d+)$/)
zusammen für n sinn haben.

danke für deine hilfe!!!

mfg mobas
Crian
 2004-02-17 13:16
#80096 #80096
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
kein Problem :)

my ($datestr) = $filename =~ /\.(\d+)$/;

Mit dieser Anweisung wird gesucht, ob in der Variablen $filename vor dem Ende des Strings ($) ein Punkt (\.) gefolgt von 1 bis beliebig vielen Ziffern (\d+) vorkommen. Falls ja, werden die Ziffern zusammen gespeichert (durch die Klammerung (...)).

Im Arraykontext wird eine Liste der gespeicherten Dinge zurückgegeben, im skalaren Kontext deren Anzahl. Durch die Klammer um $datestr wird in diesem das erste Element der zurückgegebenen Liste (die in diesem Fall aus einem oder keinen Elementen besteht) abgelegt. $datestr enthält dann entweder die Ziffern (den Timestamp) oder den Wert undef.

Statt

my ($datestr) = $filename =~ /\.(\d+)$/;


könnte man auch ausführlicher

$filename =~ /\.(\d+)$/;
my $datestr = $1;


schreiben.

HTH\n\n

<!--EDIT|Crian|1077017053-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
mobas
 2004-02-17 13:50
#80097 #80097
User since
2004-02-11
19 Artikel
BenutzerIn
[default_avatar]
ich noch mal :)

@snarf
Quote

Code
find / -mtime xyz -name "name.*"| while read a; do rm $a; done;


das sacht dem system doch das er ab dem root-verzeichniss alles durchsuchen und löschen soll was mit name. beginnt!?
also geht er doch auch rekursiv durch die verzeichnisstrukturen.
oder?
und ich denk mal das das xyz für die zeit stehen soll.
wenn ich falsch liege bitte berichtigen ;)


bi dann...

mobas
snarf
 2004-02-17 14:07
#80098 #80098
User since
2003-08-14
77 Artikel
BenutzerIn
[default_avatar]
[quote=mobas,17.02.2004, 12:50]also geht er doch auch rekursiv durch die verzeichnisstrukturen.
oder?
und ich denk mal das das xyz für die zeit stehen soll.
wenn ich falsch liege bitte berichtigen ;)[/quote]
Richtig, aber du kannst ja auch ab einem bestimmten Unterverzeichnis suchen lassen ... oder auch eine Schleife über Verzeichnisse drum herum basteln, die dann nur die jeweiligen Verzeichnisse durchsucht ...

XYZ steht für die Zeit, soweit ich mich noch richtig erinnere, kannst Du da ganze Tage angeben (a la älter als 14 Tage).

Als Shell-Script über Cron sollte das etwas schneller sein als ein Perl-Script, da nicht viel eingebunden werden muß (z.B. Interpreter-Pfade etc). Aber das ist nur interessant, wenn es irgendwie auf Performance ankommt
mobas
 2004-02-17 15:13
#80099 #80099
User since
2004-02-11
19 Artikel
BenutzerIn
[default_avatar]
hi,

@crian
danke für die hilfe! werde alles hier mal testen :)

@snarf
wozu steht eigentlich das "while read a" ?
der rest ist ja einleuchtend ;)

danke!

mfg mobas
DemoFreak
 2004-02-17 15:19
#80100 #80100
User since
2003-09-06
54 Artikel
BenutzerIn
[default_avatar]
Er verwendet die Schleife, um alle Ausgabewerte von find einzeln dem rm in den Rachen zu werfen. Dafür gibt es allerdings auch eine find-eigene Möglichkeit:
Code: (dl )
find / -mtime xyz -name "name.*" -exec rm {} \;

Sollte eigentlich genauso funktionieren.
Gruss, Hannes
<< |< 1 2 3 >| >> 21 Einträge, 3 Seiten



View all threads created 2004-02-16 15:31.