Thread regex Dateinamen (6 answers)
Opened by rc27 at 2013-06-24 09:09

topeg
 2013-06-24 12:00
#168566 #168566
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Du kannst es entweder alles mit
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
for my $fname (@files)
{
  if( $fname=~/regex/ )
  {
    verschiebe($fname, $von, $nach);
  }
  elsif( $fname=~/regex/ )
  {
    verschiebe($fname, $von, $nach);
  }
  #...
machen, oder du sparst dir Tipperei und schreibst es Übersichtlicher so:
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
my @aktionen=(
  [qr/(kx[0-9]{6})/i,      '/wo/es/hin/soll/A/'],
  [qr/(kx[0-9]{5})/i,      '/wo/es/hin/soll/B/'],
  [qr/(kx[0-9]{4})/i,      '/wo/es/hin/soll/C/'],
  [qr/(^00[0-9]{4}\D)/,    '/wo/es/hin/soll/D/'],
  [qr/(\D00[0-9]{4}\D)/,   '/wo/es/hin/soll/E/'],
  [qr/((\D|^)\d{1,6}\D)/,  '/wo/es/hin/soll/F/'],
);

my $quelle='/wo/die/dateien/sind/';
my @file_names;

# ...

for my $fname (@file_names)
{
  for my $paar (@aktionen)
  {
    my ($regex,$ziel)=@$paar;
    if($fname =~ $regex)
    {
      verschiebe($fname, $quelle, $ziel);
      last;
    }
  }
}

# --------------------------------------------------

sub verschiebe
{
  my ($file,$quelle,$ziel)=@_;
  File::Copy::move($quelle.$file,$ziel.$file);
}

So kannst du die einzelnen Aktionen leicht ergänzen und verschieben.
Das ist ein AoA (Array of Arrays) in dem zuerst die Regex und dann das Verzeichnis wohin verschoben werden soll.
Die verschachtelten For-Schleifen arbeiten sich durch die Liste der Dateinamen und prüfen für jede ob die Regexp erfüllt ist. Wenn dem so ist wird verschoben und mit der nächsten Datei weiter gemacht.

View full thread regex Dateinamen