diff --git a/utils/renamer.pl b/utils/renamer.pl new file mode 100755 index 000000000..9845e36c4 --- /dev/null +++ b/utils/renamer.pl @@ -0,0 +1,58 @@ +#!/usr/bin/env perl + +use strict; +use warnings; + +my ($fromdir, $renamefile, $todir) = @ARGV; + +sub usage { + die "usage: $0 [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\n"; +} + +usage() unless $fromdir and $renamefile and $todir; +usage() unless -d $fromdir; +usage() unless -f $renamefile; + +mkdir $todir; + +my %did = (); + +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; + +while($core=~s#^\s*,?\s*"([^"/]+)"\s*:\s*"([^"/]+)"##) { + my ($from, $to) = ($1, $2); + my $pfrom = "$fromdir/$from"; + my $pto = "$todir/$to"; + if(-e $pfrom) { + print "Renaming '$pfrom' to '$pto'\n"; + system("cp", $pfrom, $pto); + $did{$from} = 1; + } else { + push @errNex, $from + } +} + +for(@errNex) { + warn "Could not rename non-existent file: $_\n"; +} + +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}; +} + +