User Tools

Site Tools


tutorials:perl:rename_file_by_regex.3.pl
rename_file_by_regex.3.pl
#!/usr/bin/perl -w
 
my $script_name = 'rename_file_by_regex.3.pl';
 
# Chih-Horng Kuo <chkuo@lifedev.org>
# rename files by regex
# v3 2013/09/14
#   add prefix, suffix option
# v2 2010/12/31
#   add in_file_ext, out_file_ext option
# v1 2009/06/23
 
use strict;
use warnings;
 
use Getopt::Long;
 
my $in_dir;
my $out_dir;
my $in_file_ext;
my $out_file_ext;
my $regex;
my $prefix;
my $suffix;
my $mode;
my $verbose;
my $debug;
 
GetOptions(
    "in_dir=s"       => \$in_dir,
    "out_dir=s"      => \$out_dir,
    "in_file_ext=s"  => \$in_file_ext,
    "out_file_ext=s" => \$out_file_ext,
    "regex=s"        => \$regex,
    "prefix=s"       => \$prefix,
    "suffix=s"       => \$suffix,
    "mode=s"         => \$mode,
    "verbose=i"      => \$verbose,
    "debug=i"        => \$debug,
);
 
system "mkdir -p $out_dir" unless -e $out_dir;
 
my $count_in  = 0;
my $count_out = 0;
opendir( DIR, $in_dir ) or die "can't open $in_dir: $!";
while ( defined( my $in_file = readdir(DIR) ) ) {
    if ( $in_file =~ m/$regex\.$in_file_ext/ ) {
    	my $file_name = $1;
 
	    $count_in++;
        $count_out++;
 
    	if ( defined $prefix ) {
    		$file_name = $prefix . $file_name;
    	}
    	if ( defined $suffix ) {
    		$file_name = $file_name . $suffix;
    	}
        my $out_file = $out_dir . $file_name . '.' . $out_file_ext;
 
        $in_file  = $in_dir . $in_file;
 
        if ( $mode eq 'cp' ) {
            system "cp -p $in_file $out_file";
        }
        elsif ( $mode eq 'mv' ) {
            system "mv $in_file $out_file";
        }
        else {
            die "unknown mode\n";
        }
    }
}
 
if ($verbose) {
    print "count_in = $count_in, count_out = $count_out \n";
}
 
exit(0);
tutorials/perl/rename_file_by_regex.3.pl.txt · Last modified: 2017/04/12 17:27 by chkuo