Re: Perl: "find -newer" in nativ
Hallo, On Sun, Feb 12, 2023 at 03:48:36PM +0100, Hilmar Preuße wrote: > my $wanted = sub { > my $stat = stat($_); > return unless -f $stat; > return unless $stat->mtime > $touchstat->mtime; > return unless /$filePattern/; > push @files, $File::Find::name; > }; > > find($wanted, glob("/var/log/icinga/logs")); Eine Anmerkung noch. Es ist eventuell effizienter, wenn Du den Check auf den Filename vor das stat() legst. Ich bin mir nicht 100% sicher, ob das im konkreten Anwendungsfall wirklich nen Unterschied macht, aber solche syscalls grad bei Filesystemzeugs sind in Perl tendenziell teuer. (in C würd ich das definitiv davor legen) Grüsse Andreas signature.asc Description: PGP signature
Re: Perl: "find -newer" in nativ
Am 12.02.2023 um 16:13 teilte Andreas Fett mit: On Sun, Feb 12, 2023 at 03:48:36PM +0100, Hilmar Preuße wrote: Moin, find($wanted, glob("/var/log/icinga/logs")); > Dass glob() ist die Filenameexpansion wie in der Shell. Ich hatte das drin, weil Dein ursprüngliches Beispiel dort "/path/to/pen8*/pools/*/logf" verwendet hatte. Wenn der Pfad ohne wildcards ist wie oben brauchst Du das glob() nicht. Ja, danke. Das brauche ich auch. Die Pfadangabe ohne Wildcards sind erstmal vom Test-System, da sind die File-System Strukturen etwas anders. Hilmar -- sigfault
Re: Perl: "find -newer" in nativ
Hallo, On Sun, Feb 12, 2023 at 03:48:36PM +0100, Hilmar Preuße wrote: > Am 11.02.2023 um 16:36 teilte Andreas Fett mit: > > Moin, > > > Den Match für den Filenamen bekommste selber hin :-) > > > Habe mich schwer getan, aber ich denke ich habs. Bin halt kein > Programmierer. Hier nur der Teil, den ich geändert habe. > ... > find($wanted, glob("/var/log/icinga/logs")); Dass glob() ist die Filenameexpansion wie in der Shell. Ich hatte das drin, weil Dein ursprüngliches Beispiel dort "/path/to/pen8*/pools/*/logf" verwendet hatte. Wenn der Pfad ohne wildcards ist wie oben brauchst Du das glob() nicht. Grüsse Andreas signature.asc Description: PGP signature
Re: Perl: "find -newer" in nativ
Am 11.02.2023 um 16:36 teilte Andreas Fett mit: Moin, Den Match für den Filenamen bekommste selber hin :-) Habe mich schwer getan, aber ich denke ich habs. Bin halt kein Programmierer. Hier nur der Teil, den ich geändert habe. my $touchfile = '/var/log/icinga/Log_stamp'; my $touchstat = stat($touchfile) or die "No $touchfile: $!"; my $filePattern = 'Name_[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]_.*\.log$' ; my @files = (); my $wanted = sub { my $stat = stat($_); return unless -f $stat; return unless $stat->mtime > $touchstat->mtime; return unless /$filePattern/; push @files, $File::Find::name; }; find($wanted, glob("/var/log/icinga/logs")); Danke, Hilmar -- sigfault