-
Karl-Hermann Wieners authoredKarl-Hermann Wieners authored
files2config 2.64 KiB
#! /usr/bin/env perl
use strict;
use warnings;
use Getopt::Std;
$Getopt::Std::STANDARD_HELP_VERSION = 1;
my %subst_map = (
i => 'EXP_ID',
a => 'ATMO_GRID_ID',
o => 'OCEAN_GRID_ID',
A => 'ATMO_GRID_TYPE',
O => 'OCEAN_GRID_TYPE',
);
my $direct = 0;
my $xlog = '';
my %opts = ();
for my $var (keys %subst_map) {
$opts{$var} = '';
}
getopts('dx'.join(':', keys(%subst_map), ''), \%opts) or die("\n");
exists $opts{d} and $direct = 1;
exists $opts{x} and $xlog = '\+';
my %file_info = ();
while(<>) {
s/^\d{4,}-\d\d-\d\dT\d\d:\d\d:\d\d: //; # Remove log time stamps
if(my ($mtd, undef, $src, $dst) =
m{^$xlog\s*((cdo|cp|ln)\s.*)\s+(\S+)\s+(\S+)\s*$}) {
#DEBUG# warn($_, join(':', $mtd, $src, $dst), "\n"); #DEBUG#
# Clean source file name
$src =~ s{/+$}{};
$src =~ s{^\./+}{};
# Clean destination file name
$dst =~ s{/+$}{};
$dst =~ s{^\./+}{};
my $dir = $src;
if($dir =~ m{/}) {
$dir =~ s{^(.*)/.*$}{$1};
$src =~ s{^.*/}{};
}
else {
$dir = '.';
}
unless($dst && $dst ne '.') {
$dst = $src
}
$direct and print($_, join(':', $mtd, $dir, $src, $dst), "\n");
my $key = "$dir:$src:$dst";
exists $file_info{$key} and die("duplicate key '$key'\n");
$file_info{$key} = [$mtd, $dir, $src, $dst];
}
}
sub subst_key($) {
my $key = shift;
for my $var (keys %subst_map) {
if($opts{$var}) {
$key =~ s/[._]$opts{$var}//;
}
}
return $key;
}
sub subst_value($) {
my $value = shift;