Schrift
[thread]9046[/thread]

Neueste Datei in einem Verzeichnis finden

Leser: 2


<< |< 1 2 >| >> 15 Einträge, 2 Seiten
krusty
 2007-05-29 16:17
#77036 #77036
User since
2006-01-27
91 Artikel
BenutzerIn
[default_avatar]
Hallo zusammen,

habe mal wieder ein kleines Problem.
Ich muss die aktuellste Datei in einem Verzeichnis herausfinden. Damit muss ich dann weiter arbeiten. Jedoch fehlt mir momentan der Ansatz, um die neueste Datei in dem Verzeichniss zu finden.
Könnt ihr mir vielleicht einen Hinweis geben??

Im voraus herzlichen Dank.

Krusty
renee
 2007-05-29 16:51
#77037 #77037
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Suche die Datei mit dem neuesten Modifydatum (ungetestet):
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
my $dir = 'verzeichnis';

opendir DIR, $dir or die $!;
my $latest = (
    map{
        $_->[0]
    }
    sort{
        $a->[1] <=> $b->[1]
    }
    map{
        [$_, -M $_]
    }readdir DIR )[0];
\n\n

<!--EDIT|renee|1180443213-->
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
krusty
 2007-05-29 17:21
#77038 #77038
User since
2006-01-27
91 Artikel
BenutzerIn
[default_avatar]
Hi renee,

danke für die schnelle Hilfe, leider liefert mir das Script nur einen Punkt zurück. Da ich noch nicht mit "map" gearbeitet habe, verstehe ich das Script leider noch nicht so richtig.
renee
 2007-05-29 17:26
#77039 #77039
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
my $dir = 'verzeichnis';

opendir DIR, $dir or die $!;
my $latest = (
    map{
        $_->[0]
    }
    sort{
        $a->[1] <=> $b->[1]
    }
    map{
        [$_, -M $_]
    }
    grep{
        -f $_
    }readdir DIR )[0];


map{ BLOCK } LISTE liefert Dir für jedes Element der Liste das Ergebnis (Rückgabewert) des Blocks.

Wenn Du im Array (1,2,3,4) jede Zahl verdoppeln willst, kannst Du das so machen:
Code (perl): (dl )
1
2
3
4
my @array = (1..4);
print "@array\n";
@array = map{ $_ * 2 }@array;
print "@array\n";
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
renee
 2007-05-29 17:31
#77040 #77040
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Um es besser zu verstehen, kannst Du das ganze aufteilen und Dir die Zwischenschritte ausgeben lassen:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#!/usr/bin/perl

use strict;
use warnings;
use Data::Dumper;

my $dir = '.';

opendir DIR, $dir or die $!;
my @files = readdir DIR;
print Dumper(\@files);

@files = grep{ -f $_ }@files;
print Dumper(\@files);

@files = map{ [$_, -M $_] }@files;
print Dumper(\@files);

@files = sort{ $a->[1] <=> $b->[1] }@files;
print Dumper(\@files);

@files = map{ $_->[0] }@files;
print Dumper(\@files);

my $latest = $files[0];
print $latest;

closedir DIR;
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
betterworld
 2007-05-29 17:39
#77041 #77041
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
Code: (dl )
find . -mindepth 1 -maxdepth 1 -printf '%T@ %p\n' | sort -nr | head -1 | sed 's/^[^ ]* //'

*duck*

braucht GNU find\n\n

<!--EDIT|betterworld|1180446121-->
vayu
 2007-05-29 17:53
#77042 #77042
User since
2005-01-13
782 Artikel
BenutzerIn
[default_avatar]
also das erste von renee hat bei mir auch nicht so recht gewollt, aber das hier gibt auch nur wirkliche Dateien aus und lässt . und .. aussen vor

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
my $dir = "verzeichnis";

my $latest = (
map{
$_->[0]
}
sort{
$a->[1] <=> $b->[1]
}
map{
[$_, -M $_]
}
grep {
-f $_
}
glob(
$dir."*"))[0];

print $latest;
\n\n

<!--EDIT|vayu|1180446847-->
krusty
 2007-05-29 18:03
#77043 #77043
User since
2006-01-27
91 Artikel
BenutzerIn
[default_avatar]
@renee,

gibt es jetzt noch eine Möglichkeit nur Dateien die im Dateinamen "Vollexport" stehen haben, die neueste auszugeben?

Werde mir das mit dem map heute abend noch nen bissel näher anschauen. Eigentlich müsste man doch mit grep das gewünschte Ziel erreichen.

MfG
renee
 2007-05-29 19:39
#77044 #77044
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=vayu,29.05.2007, 15:53]also das erste von renee hat bei mir auch nicht so recht gewollt,[/quote]
Deswegen habe ich "ungetestet" dazugeschrieben. Ein wenig Rätselspaß soll ja auch für andere bleiben ;-)
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
renee
 2007-05-29 19:42
#77045 #77045
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=krusty,29.05.2007, 16:03]@renee,

gibt es jetzt noch eine Möglichkeit nur Dateien die im Dateinamen "Vollexport" stehen haben, die neueste auszugeben?

Werde mir das mit dem map heute abend noch nen bissel näher anschauen. Eigentlich müsste man doch mit grep das gewünschte Ziel erreichen.

MfG[/quote]
Richtig, das grep muss dann so aussehen:
Code (perl): (dl )
1
2
3
    grep{
        -f $_ and $_ =~ /Vollexport/
    }
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
<< |< 1 2 >| >> 15 Einträge, 2 Seiten



View all threads created 2007-05-29 16:17.