#!/usr/bin/perl -w # Author : Johan Vromans # Created On : Tue Sep 15 15:59:04 1992 # Last Modified By: Johan Vromans # Last Modified On: Tue Dec 15 14:59:05 2020 # Update Count : 158 # Status : Unknown, Use with caution! ################ Common stuff ################ use strict; ################ Command line parameters ################ my $showonly = 0; # just show, do nothing my $reverse = 0; # process in reverse order my $overwrite = 0; # overwrite existing files my $createdirs = 0; # create missing dirs my $link = 0; # link instead of rename my $symlink = 0; # symlink instead my $verbose = 0; # more verbosity my $trace = 0; # tracing # Process command line options. app_options(); ################ Presets ################ ################ The Process ################ use File::PerlMove; # Get the command string; my $cmd = shift; pmv( $cmd, \@ARGV, { showonly => $showonly, reverse => $reverse, overwrite => $overwrite, createdirs => $createdirs, link => $link, symlink => $symlink, verbose => $verbose, trace => $trace, } ); exit; ################ Command Line Options ################ use Getopt::Long qw(:config bundling); sub app_options { eval { Getopt::Long::->VERSION(2.34) }; # will enable help/version GetOptions(ident => \&app_ident, 'verbose|v' => \$verbose, 'trace' => \$trace, # application specific options go here 'link|l' => \$link, 'symlink|s' => \$symlink, 'dry-run|n' => \$showonly, 'reverse|r' => \$reverse, 'overwrite|o' => \$overwrite, 'make-dirs|p' => \$createdirs, ) or Getopt::Long::HelpMessage(2); } sub app_ident { print STDOUT ("This is File::PerlMove [pmv $File::PerlMove::VERSION]\n"); } __END__ =head1 NAME pmv - rename files using Perl expressions =head1 SYNOPSIS pmv [options] expression [file ...] Options: --dry-run -n show, but do not do it --link -l link instead of rename --symlink -s symlink instead of rename --reverse -r process in reverse order --overwite -o overwrite existing files --make-dirs -p create target dirs, if necessary --verbose -v verbose information --ident show identification --help brief help message =head1 DESCRIPTION B will apply the given Perl expression to each of the file names. If the result is different from the original name, the file will be renamed, linked, or symlinked. If the expression is any of C, C, of C, B will DWIM. Note that these are pretty useless on file systems that are case insensitive. B is a wrapper around File::PerlMove, which does most of the work. =head1 OPTIONS =over 8 =item B<--dry-run> B<-n> Show the changes, but do not rename the files. =item B<--link> B<-l> Link instead of rename. =item B<--symlink> B<-s> Symlink instead of rename. Note that not all platforms support symlinking. =item B<--reverse> B<-r> Process the files in reversed order. =item B<--overwrite> B<-o> Overwrite existing files. =item B<--make-dirs> B<-p> Create target directories if necessary. =item B<--verbose> B<-v> More verbose information. =item B<--version> Print a version identification to standard output and exits. =item B<--help> Print a brief help message to standard output and exits. =item B<--ident> Prints a program identification. Processing continues. =item I File name(s). =back =head1 EXAMPLES To change editor backup files back to Perl sources: $ pmv -v 's/\.bak$/.pl/' *.bak foo.bak => foo.pl bar.bak => bar.pl Lowcase file names: $ pmv -v lc *JPG DSC03345.JPG => dsc03345.jpg DSC03346.JPG => dsc03346.jpg DSC03347.JPG => dsc03347.jpg Shift numbered examples to a new section: $ pmv --verbose --reverse 's/^ex(\d)/"ex".($1+3)/ge' ex* ex42.dat => ex72.dat ex25.dat => ex55.dat ex22.dat => ex52.dat ex13.dat => ex43.dat ex12.dat => ex42.dat Note that these need to be processed in reversed order, to prevent C<< ex12.dat => ex42.dat >> botching with the exisitng C. =head1 SEE ALSO File::PerlMove, App::perlmv (and perlvm), File::Rename (and rename). =head1 AUTHOR Johan Vromans =head1 COPYRIGHT This programs is Copyright 2004,2010,2011,2017 Squirrel Consultancy. This program is free software; you can redistribute it and/or modify it under the terms of the Perl Artistic License or the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. =cut