| Category: | Utilities |
| Author/Contact Info | fundflow |
| Description: | This script renames files safely and convinenty. Safely means that no files will be lost in the process, so the worst you can do is to give the files new uniqe names. A detailed explanation is given in case something is wrong. Convinently means that you can do things like:
This script has been slowly evolving here and i thought others might like it. It is a newer version of what i posted before, but as Anonymous so i can't update it... All comments are welcome. Enjoy |
#!/usr/bin/perl -w
if (@ARGV<2) {
print STDERR<<EOM;
rename file names using perl substitution:
rename .old .new *.old
rename 'upper unless /^Make/' *
rename 'lower unless /^Make/' *
rename 'y/A-Z/a-z/ unless /^Make/' * (same as above)
rename 's/\.orig\$//' *.orig
rename '\$_ .= ".bad"' *.f
rename '\$_ .= "-t"' *
rename 'print "\$_: "; s/foo/bar/ if <stdin> =~ /^y/i' *
EOM
exit(1);
}
$op = shift;
$op =~ s|lower|y/A-Z/a-z/|;
$op =~ s|upper|y/a-z/A-Z/|;
# Deal with 'ren.pl .old .new *'
if (! -f $ARGV[0]) {
$op="s/$op/" . $ARGV[0] . "/";
}
for (@ARGV) {
next if(! -e $_);
$was = $_;
eval $op;
$newnames{$_}++;
$moveto{$was} = $_;
}
# Make sure nothing will be lost:
$ok=1;
foreach (keys %moveto) {
if ( $newnames{$moveto{$_}} > 1) {
print STDERR "$_ --> $moveto{$_}: ",
"multiple files ($newnames{$moveto{$_}}) would",
" be renamed to $moveto{$_}\n";
$ok=0;
}
next if ($_ eq $moveto{$_});
if (-e $moveto{$_}) {
print STDERR "$_ --> $moveto{$_}: file already exists.\n";
$ok=0;
}
}
exit 1 unless($ok);
foreach (keys %moveto) {
next if ($_ eq $moveto{$_});
print "Renaming $_ to $moveto{$_}\n";
rename($_,$moveto{$_});
}
|
|
|
|---|