100 lines
2.5 KiB
Perl
Executable File
100 lines
2.5 KiB
Perl
Executable File
#!/usr/bin/env perl
|
|
|
|
use strict;
|
|
use warnings;
|
|
|
|
my %progparams = ();
|
|
while(@ARGV > 3) {
|
|
my $p = shift @ARGV;
|
|
$progparams{$p} = 1;
|
|
}
|
|
|
|
my $verbose = $progparams{"-v"};
|
|
|
|
my ($fromdir, $renamefile, $todir) = @ARGV;
|
|
|
|
sub usage {
|
|
my $msg = shift;
|
|
if($msg) { $msg="\n$msg\n" } else {$msg=''}
|
|
die "usage: $0 {options} [fromdir] [renamefile] [todir]\n
|
|
takes files from [fromdir], renames according to the json-map in
|
|
[renamefile] and writes the files to [todir].
|
|
old filenames are used as keys; new filenames as value.
|
|
|
|
Options:
|
|
-v verbose output
|
|
$msg";
|
|
}
|
|
|
|
usage("missing parameters: fromdir renamefile todir needed") unless $fromdir and $renamefile and $todir;
|
|
usage("fromdir is not a directory") unless -d $fromdir;
|
|
usage("renamefile is not given") unless -f $renamefile;
|
|
|
|
|
|
#mkdir $todir;
|
|
system("mkdir", '-p', $todir);
|
|
|
|
my %did = ();
|
|
my %params = ();
|
|
|
|
my @errNex = ();
|
|
|
|
my $fh = undef;
|
|
open($fh, '<', $renamefile) or die "Cannot read '$renamefile', because: $!";
|
|
my $cont = join '', <$fh>;
|
|
close $fh;
|
|
if($cont!~m#^\s*\{(.*)\}\s*$#s) { die "'$renamefile' not in an expected format; it should be an json-object" }
|
|
my $core = $1;
|
|
|
|
my %toRename = ();
|
|
|
|
while($core=~s#^\s*,?\s*"(/?[^"/]+)"\s*:\s*"([^"]+)"##) {
|
|
my ($to, $from) = ($1, $2);
|
|
if ($to =~ m#^/#) {
|
|
$params{$to} = $from;
|
|
} else {
|
|
$toRename{$to} = $from;
|
|
}
|
|
}
|
|
|
|
my $defaultExtension = $params{"/defaultExtension"};
|
|
my $license = $params{"/license"};
|
|
$license =~ s#\\n#\n#g if defined $license;
|
|
|
|
for my $to (keys %toRename) {
|
|
my $from = $toRename{$to};
|
|
die "Cannot rename into subdirectories" if $to =~ m#/#;
|
|
my $pfrom = "$fromdir/$from";
|
|
my $pto = "$todir/$to";
|
|
if (defined $defaultExtension and $from !~ m#\.#) {
|
|
$_ .= ".$defaultExtension" for $pfrom, $pto;
|
|
}
|
|
if(-e $pfrom) {
|
|
print "Renaming '$pfrom' to '$pto'\n" if $verbose;
|
|
system("cp", $pfrom, $pto);
|
|
$did{$from} = 1;
|
|
if (defined $license) {
|
|
my $fh = undef;
|
|
open ($fh, '>', "$pto.license") or die "Could not write $pto.license because: $!";
|
|
print $fh $license
|
|
}
|
|
} else {
|
|
push @errNex, $from
|
|
}
|
|
}
|
|
|
|
for(@errNex) {
|
|
warn "Could not rename non-existent file: $_\n" if $verbose;
|
|
}
|
|
|
|
die "Syntax error in [renamefile], could not process everything!" if $core!~m#^[\s*,]*$#;
|
|
|
|
my $dh = undef;
|
|
opendir($dh, $fromdir) or die "Could not read dir '$fromdir', because: $!";
|
|
while(my $filename = readdir($dh)) {
|
|
next if $filename=~m#^\.\.?$#;
|
|
warn "Did not touch not mentioned file '$filename'\n" unless $did{$filename} or not $verbose;
|
|
}
|
|
|
|
|