Re: Perl: "find -newer" in nativ

2023-02-12 Diskussionsfäden Andreas Fett
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

2023-02-12 Diskussionsfäden Hilmar Preuße

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

2023-02-12 Diskussionsfäden Andreas Fett
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

2023-02-12 Diskussionsfäden Hilmar Preuße

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