Thread höchste dateinamen verzeichnis (7 answers)
Opened by thorben at 2011-02-08 16:45

renee
 2011-02-09 16:14
#145520 #145520
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ok, dann habe ich Dich falsch verstanden...

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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#!/usr/bin/perl

use strict;
use warnings;

my $dir = '/home/jars/community_test/';

my %files;
my @keep;
my @to_delete;

opendir my $dir_h, $dir or die "Can't open directory $dir: $!";
while ( my $entry = readdir $dir_h ) {

    # hole den namen und den "counter"
    my ($name,$counter) = $entry =~ m{ (.*?) (\d+) [a-z] \.txt }x;

    # wenn es keine Datei mit dem Muster ist, mache einfach mit
    # der nächsten Datei weiter
    next if !($name and $counter);

    # speichere den namen und das "zählkürzel"
    # $files->{TestA_}->{001} = 1
    push @{ $files{$name}->{$counter} }, $entry;
}
closedir $dir_h;

# laufe über die Namen (z.B. TestA001, TestA002, ...)
for my $name ( keys %files ) {

    # sortiere die "zählkürzel" absteigend. Das "höchste" wird in
    # $keep gespeichert, der Rest in @delete
    my ($keep,@delete) = sort{ $b cmp $a }keys %{ $files{$name} };

    # setze den Dateinamen wieder zusammen und speichere es in @keep
    push @keep, map{ $dir . $_ }@{ $files{$name}->{$keep} };

    # für jedes andere Zählkürzel wird der Dateiname zusammengesetzt und
    # in @to_delete gespeichert.
    push @to_delete, map{ $dir . $_ }map{ @{ $files{$name}->{$_} } }@delete;
}

print "Keep: @keep\nDelete: @to_delete\n";


Die Dateien können nicht gelöscht werden, weil die Pfadangabe fehlte.
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/

View full thread höchste dateinamen verzeichnis